簡體   English   中英

使用捆綁執行耙或只是耙?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM