2011-11-27 128 views
0

從我的研究中,bundle exec負責在bundle的上下文中執行命令。「bundle exec rake db:migrate」是做什麼的?

無論如何,我還不完全明白它的作用與bundle exec rake db:migrate的命令rake db:migrate不同。

例如在我的情況,我執行的第一個命令,我得到了什麼是以下錯誤:

$ rake db:migrate 
(in c:/rails/rails_projects/soccerweb) 
rake aborted! 
uninitialized constant Rake::DSL 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2482:in `const_missing' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/tasklib.rb:8:in `<clas 
s:TaskLib>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/tasklib.rb:6:in `<modu 
le:Rake>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/tasklib.rb:3:in `<top 
(required)>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/testtask.rb:4:in `requ 
ire' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/testtask.rb:4:in `<top 
(required)>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/test_unit/testing.r 
ake:2:in `require' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/test_unit/testing.r 
ake:2:in `<top (required)>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/test_unit/railtie.r 
b:12:in `load' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/test_unit/railtie.r 
b:12:in `block in <class:TestUnitRailtie>' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/railtie.rb:183:in ` 
call' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/railtie.rb:183:in ` 
block in load_tasks' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/railtie.rb:183:in ` 
each' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/railtie.rb:183:in ` 
load_tasks' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/engine.rb:396:in `b 
lock in load_tasks' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/application/railtie 
s.rb:8:in `each' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/application/railtie 
s.rb:8:in `all' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/engine.rb:396:in `l 
oad_tasks' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/application.rb:103: 
in `load_tasks' 
c:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/railtie/configurabl 
e.rb:30:in `method_missing' 
c:/rails/rails_projects/soccerweb/Rakefile:7:in `<top (required)>' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2373:in `load' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile' 
c:/Ruby192/lib/ruby/1.9.1/rake.rb:1991:in `run' 
c:/Ruby192/bin/rake:31:in `<main>' 

,但是當我用「捆綁EXEC」那前面的「耙分貝:遷移」命令,一切都爲我優雅地工作!

任何人都可以對我有所瞭解?

+0

可能重複:migrate mean?](http://stackoverflow.com/questions/6588674/what-does-bundle-exec-rake-dbmigrate-mean) –

回答

5

bundle exec rake運行您在Gemfile中指定的rake版本。在您的$PATH中可以找到的默認版本rake可能與bundle exec rake執行的版本不同。

您遇到的問題已在separate question中涵蓋。您的bundle exec rake很可能運行從您的$PATH耙0.8.7和rake是受此問題影響的較新版本。

man bundle exec報價:

束EXEC使得一些更改shell環境,然後執行你完全指定命令。

  • (...)
  • 把含有可執行文件(如導軌,RSpec的,rackup)的目錄,在捆綁上$ PATH [這是什麼捆綁高管耙分貝
0

Bundler爲您解決寶石依賴問題。你可以在rationale頁面找到關於它的最好解釋。

相關問題