2015-11-04 62 views
1

bundle exec rake db:migrate真的意味着什麼?或者bundle exec rails我知道bundle處理我們在Gemfile中指定的所有gem,並且rake處理所有你可以通過腳本執行的事情,但是這些命令不會在沒有前綴bundle exec的情況下執行,我找不到在互聯網上的任何文件!在Ruby on Rails中使用bundle exec

回答

3

捆紮機 - 管理你的應用程序的依賴

在捆綁的上下文中運行命令,最好的辦法

$束EXEC

Exec的運行命令,只要它能夠訪問在寶石束。當使用捆綁EXEC可以要求並調用綁定的寶石,好像他們是安裝到系統級的RubyGems庫

0

有了:

束EXEC耙分貝:遷移

在一個非正式的方式,意味着你的Rails環境將

-Install依賴與捆綁 然後 - 運行在你的Rails應用程序的數據庫遷移(/ yourapp/DB /遷移)

除了數據庫操作,你可以做任何其他的命令行的東西,可以通過耙控制(如建立你的應用程序,擴展,清理一些文件等)

,如果你想這可能是有用避免令人困惑的場景,可能是您的設置中某些寶石已過時,或從您的環境中丟失。這是一個很好的做法,因爲調用rake本身並不能保證你得到了所有的依賴。

0

Bundler的作用是創建一個獨立於底層主機系統的獨立的Ruby語言編程環境。它可以做什麼是有限的。例如,您需要像RVM這樣的軟件來管理不同版本的Ruby語言虛擬機。當然,Ruby和Bundler本身必須在您的項目之外才能運行。

但是,在一個項目中,bundle exec將限制Bundler安裝到該項目中的寶石的訪問權限。這意味着,通過bundle exec調用Rake實用程序將是您的項目中安裝的rake版本,而不是系統範圍的版本。這也意味着`bundle rake db:migrate'將使用爲您的項目安裝的正確版本的rails。這會將您的項目與主機上Ruby環境的更新隔離開來,從而防止出現兼容性問題。

您可以通過在你的.bash_profile創建別名(假設你使用OSX或Linux/UNIX)爲bundle execbundle exec rakebundle exec rails繞過冗長。我使用bexec,剎車和brails。