2011-09-14 43 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')有关,但并不总是如此,这也会导致一些测试失败。) –