2011-09-14 555 views
11

一直熱愛rails,但仍然掙扎着從命令行運行任務需要多長時間。Rails:一次運行多個rake任務?

我想知道是否有可能在不重新加載環境的情況下組合多個rake任務。例如,如果我跑

rails generate rspec:install && rails generate model test_model title:string && rake db:migrate 

它將花費10秒裝載了軌運行rspec的安裝,然後又十秒鐘加載了環境生成模型,然後又進行遷移。有沒有辦法讓所有3個命令保持相同的環境?

回答

21

看一下rails-sh gem - 它引導Rails環境,然後提供一個命令行界面,以便您可以在其中運行您的命令。使用它時有一些限制(我認爲你不能改變你的RAILS_ENV),但是對於你的使用情況來說,它應該是完美的。

如果你的命令只是Rake任務,你可以用空格分隔它們,例如:

rake db:migrate && rake db:test:clone_structure 

將成爲

rake db:migrate db:test:clone_structure 
+0

哇 - 我驚呆了我不知道的那。太棒了,非常感謝。 – PlankTon

+2

注意:使用空格分隔Rake任務似乎像Bash運算符'&&'那樣行事,正如答案所暗示的 - 而不是'''運算符。如果以前的任務完成沒有錯誤,空間分離只能運行一項任務。 'bundle exec rake test cucumber'只在'test'任務中沒有測試失敗時運行'cucumber'任務。 –

+0

空間分隔與'&&'不完全等價。在我的代碼的一個版本中,'bundle exec rake test cucumber'使一些Cucumber測試失敗,但是'bundle exec rake test && bundle exec rake cucumber'可以讓所有測試通過。 (這可能與有時在該版本的代碼上捆綁exec cucumber(沒有'rake')有關,但並不總是如此,這也會導致一些測試失敗。) –