我有一个Rails的任务:我应该使用脚本/亚军或耙?

对于特别的 Rails任务,我们有几个实现的select,其中主要看起来是:

script/runner some_useful_thing 

和:

 rake some:other_useful_thing 

我应该select哪个选项? 如果有一个明确的喜爱,那么,如果有的话,我应该考虑使用其他? 如果从来没有,那么为什么你会认为它仍然存在于框架没有贬低警告?

它们之间的区别在于script/runner引导Rails,而Rake任务除非通过使任务依赖于:environment来告诉它:

 task :some_useful_task => :environment do # do some useful task end 

由于引导Rails是昂贵的,如果可以避免,可能会跳过。

除此之外,它们大致相当。 我同时使用,但最近我已经使用script/runner分开执行一个脚本更多。

FWIW似乎有一些从使用脚本亚军倾向于耙子的运动:

更新(4/25/2009):我推荐使用rake任务,而不是脚本/ runner来进行重复性任务。

另外, 根据这篇文章,你可以使用耙重复任务就好了:

如果我然后想在午夜的时候在我的生产数据库上运行,我可能会写一个如下所示的cronjob:

0 0 * * * cd / var / www / apps / rails_app / && / usr / local / bin / rake RAILS_ENV =生产应用:send_expire_soon_emails

更正基于评论2下。 给他们业力!

FWIW – Rails 3.0+改变了你如何在一个独立的脚本中初始化Rails系统。

 require File.dirname(__FILE__) + '/config/environment' 

如上所述,您还可以:

 rails runner script/<script name> 

或者把所有的代码放在一个Rake任务中,但是我有很多来自Rails 2的遗留代码; 所以我不想马上走下去。

各有其优点和缺点。

将parameter passing给rake任务是一件痛苦的事情,至less可以这样说。 你或者需要求助于环境variables,或者是一个非常直观,且有很多警告的黑客参数系统。

如果你的任务需要优雅地处理命令行参数,那么写一个脚本是一个很好的select。

Luke Francl提到脚本/跑步者启动Rails。 确实如此。 但是,如果你不想启动rails,那就直接运行这个脚本,而不需要script / runner。 所以脚本和耙子任务之间唯一真正的区别就是他们的美学。 select适合你的任何感觉。

我使用rake任务进行小任务(一行或两行)。 更复杂的东西进入脚本/目录。 如果我认为其他开发者会希望代码能够在另一个地方生活,我会打破这个规则。

有一件事我只是写普通的ruby脚本,并把它们放在script/maintenance目录。

所有你需要做的加载轨道和访问所有你的模型等,是require '../../config/environment.rb'在您的文件的顶部,那么你require '../../config/environment.rb'在了。

在Rails 3.0+中, config/environment.rb需要config/application.rb ,它需要config/boot.rb

因此,要在Rails 3中加载应用程序,您只需要使用environment.rb

对于一个命令脚本/亚军可以罚款。 对于重复的任何事情,从长远来看,耙子任务更容易,如果你忘记了它的作用,就有一个总结。

我得到的印象脚本/亚军主要是为了定期任务。 例如,运行一个cron作业:

 SomeClass.update_from_web('http://www.sourcefordata.gov/')