在Rails环境中运行计划任务的最佳方法是什么?脚本/跑步吗?耙?我想每隔几分钟运行一次任务。


当前回答

在严重依赖计划任务的项目中,我使用了非常流行的每当,它很棒。它为您提供了一个很好的DSL来定义计划任务,而不必处理crontab格式。自述:

无论何时都是Ruby宝石,提供了一个 用于编写和部署的清晰语法 cron作业。

来自README的例子:

every 3.hours do
  runner "MyModel.some_process"       
  rake "my:rake:task"                 
  command "/usr/bin/my_great_command"
end

every 1.day, :at => '4:30 am' do 
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end

其他回答

无论何时(和cron)的问题是,它每次执行时都会重新加载rails环境,当任务频繁或有大量初始化工作要做时,这是一个真正的问题。由于这个原因,我在生产中出现了问题,必须警告你。

Rufus调度器为我做(https://github.com/jmettraux/rufus-scheduler)

当我有较长的作业要运行时,我使用delayed_job (https://github.com/collectiveidea/delayed_job)

我希望这能有所帮助!

我是资源调度程序的忠实粉丝。您不仅可以重复运行类似cron的任务,还可以在特定时间运行任务。缺点是,它需要一个Redis服务器。

使用Craken(以rake为中心的cron作业)

我曾经也做过同样的决定,今天我对这个决定很满意。使用resque调度程序,因为不仅一个单独的redis会从你的数据库中取出负载,你还可以访问许多插件,如resque-web,它提供了一个伟大的用户界面。随着系统的发展,你会有越来越多的任务要安排,这样你就可以从一个地方控制它们。

最好的方法可能是使用rake来编写所需的任务,然后通过命令行执行它。

你可以在railscasts看到一个非常有用的视频

也可以看看其他资源:

Rails Rake教程