[英]Use bundle exec rake or just rake?
我只使用像rake db:migrate
這樣的rake命令學習了Rails; 但是,我讀到我應該使用bundle exec rake ...
而不僅僅是普通的rake
。 現在我對使用哪個感到困惑。
我應該使用bundle exec rake
而不僅僅是普通的rake
還是僅僅是一個偏好的東西? 任何見解都將非常感謝! 謝謝!
bundle exec
在bundle的上下文中執行命令。
這意味着它使用Gemfile中指定的gem。 很多時候,運行bundle exec rake foo
的結果與你運行rake foo
結果相同,特別是如果你在系統范圍內安裝了與Gemfile相同的gems。 但是,某些應用程序可能會指定不同於您在系統范圍內安裝的寶石版本,並且可能希望這些精確的寶石和版本能夠正確運行。 如果你只是在沒有bundle exec
情況下運行,你可能會遇到一些奇怪的錯誤。
使用bundle exec
保證程序與gemfile中指定的環境一起運行,這有望意味着它是程序創建者希望它運行的環境,這有望意味着它應該正確運行,無論你設置什么奇怪的設置有你的電腦。
它基本上標准化了運行程序的環境。 這有助於避免版本地獄,讓生活更輕松。
有關詳細信息,請參閱http://bundler.io/v1.3/man/bundle-exec.1.html 。
$ bundle exec rake db:migrate
使用Gemfile中指定的rake版本來執行rake任務db:migrate
。
但是在Gemfile中沒有指定rake gem!
是的,但是rake gem被安裝為一些其他gem的依賴 - 看看Gemfile.lock。 因此規則必須是:使用Gemfile.lock中指定的rake版本。
但是Gemfile.lock沒有指定特定版本 - 它指定的版本大於xy!
然后規則必須是:使用當前gemset中安裝的rake版本。
$ rake db:migrate
通常,當您在命令行上發出命令(例如rake)時,系統會在PATH環境變量中指定的目錄列表中搜索該命令。 包含該命令的第一個目錄是使用的命令的版本。 要查看哪個目錄,您可以執行以下操作:
$ which rake
所以,如果你執行,
$ rake db:migrate
可能使用與您安裝bundle install
rake gem不同的rake gem。 但是,即使您的系統找到與bundle exec
相同的rake版本,也會在項目的gemset之外的位置搜索rake源代碼所需的任何gem。 因此,有很多方法可以:
$ rake db:migrate
可以搞砸了。
根據Ruby on Rails教程書(免費在線),第3.6節,如果您使用的是rvm 1.11.x +,那么您不需要使用bundle exec
前言命令。
在沒有bundle exec
情況下運行任何exacutable將使Rubygems獲取系統中安裝的最新版本的gem。
通過添加bundle exec
前綴而不是在Gemfile.lock的上下文中運行可執行文件,這意味着將使用gem文件中定義的版本運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.