Mik*_*use 66 ruby rake ruby-on-rails
对于临时 Rails任务,我们有一些实现替代方案,其中主要似乎是:
script/runner some_useful_thing
Run Code Online (Sandbox Code Playgroud)
和:
rake some:other_useful_thing
Run Code Online (Sandbox Code Playgroud)
我更喜欢哪个选项?如果有一个明显的喜欢那么,如果有的话,我应该考虑使用另一个?如果从来没有,那么为什么你认为它仍然存在于没有弃用警告的框架中?
Luk*_*ncl 59
它们之间的区别在于script/runner
引导Rails而Rake任务没有,除非你通过让任务依赖于它来告诉它:environment
,如下所示:
task :some_useful_task => :environment do
# do some useful task
end
Run Code Online (Sandbox Code Playgroud)
由于启动Rails很昂贵,如果可以避免它,可能值得跳过.
除此之外,它们大致相同.我使用两者,但最近我使用script/runner
了更多单独执行脚本.
esi*_*ver 10
FWIW似乎有一些动作远离使用脚本运行器而不是 rake:
更新(2009年4月25日):我建议使用rake任务而不是脚本/运行器来执行重复任务.
此外,根据这篇文章,您可以使用rake进行重复性任务就好了:
如果我希望这个在午夜时分在我的生产数据库上运行,我可能会写一个看起来像这样的cronjob:
0 0***cd/var/www/apps/rails_app/&&/usr/local/bin/rake RAILS_ENV = production utils:send_expire_soon_emails
Alf*_*zio 10
至少可以说,将参数传递给rake任务是一个痛苦的屁股.您需要求助于环境变量或非常讨厌的参数系统,这些参数系统不直观并且有很多警告.
如果您的任务需要优雅地处理命令行参数,那么编写脚本是可行的方法.
Luke Francl提到脚本/跑者启动Rails.确实如此.但是,如果您不想启动rails,那么只需按原样运行脚本,而不使用script/runner.因此,脚本和rake任务之间唯一真正的区别在于它们的美学.选择适合自己的感觉.
我使用rake任务执行小任务(一行或两行).更复杂的东西进入脚本/目录.如果我认为其他开发人员希望代码在一个地方生活在另一个地方,我会打破这个规则.
根据评论2进行更正.给他们业力!
FWIW - Rails 3.0+更改了在独立脚本中初始化Rails系统的方式.
require File.dirname(__FILE__) + '/config/environment'
Run Code Online (Sandbox Code Playgroud)
如上所述,您还可以:
rails runner script/<script name>
Run Code Online (Sandbox Code Playgroud)
或者将所有代码放在Rake任务中,但是我有很多来自Rails 2的遗留代码; 所以我不想马上走那条路.
每个都有其优点和缺点.
我做的一件事就是编写普通的ruby脚本并将它们放在script/maintenance
目录中.
您需要做的就是加载rails并访问所有模型等,将其放在require '../../config/environment.rb'
文件的顶部,然后就可以了.
归档时间: |
|
查看次数: |
32525 次 |
最近记录: |