1

我正在编写一个 Rails 3 应用程序,它需要为每个用户按自定义计划执行小任务。计划任务将动态定义。现在我的计划是使用 redis 的 resque 调度程序。

一旦我为指定任务设置了时间表(例如,每 48 小时运行一次任务 A),我想无限期地运行该任务。所以我想将这些计划存储在数据库或其他东西中,以防应用程序在重新启动时崩溃,它会再次加载这些任务。

这是 Resque 默认支持的东西,通过将它存储在 redis 中还是我需要编写自己的自定义东西?我也在看 ruby​​-taskr (http://code.google.com/p/ruby-taskr/)。我不确定taskr是否支持将其存储在数据库中并在启动时注册?

如果有我可以查看的应用程序/演示也会很有帮助。

谢谢

4

1 回答 1

1

我对批处理作业有类似的设置。用户将它们添加到 Web 仪表板上,并且它们会被指定运行,但通常是指定的。

我使用 active-record 来存储调度定义,使用 resque 来执行,并使用单个 cron 条目来使用 rake 任务进行排队。

那么在 rake 任务中:

to_run = Report.daily
to_run += Report.weekly if Time.now.monday?
to_run += Report.monthly if Time.now.day == 1

to_run.each{|r| r.enqueue!}

其中daily、weekly、monthly 是模型上的命名范围:

class Report < ActiveRecord::Base
  scope :daily, where(:when_to_run => 'daily')
  scope :weekly, where(:when_to_run => 'weekly')
  scope :monthly, where(:when_to_run => 'monthly')
end

这有点 hacky,但效果很好,我很好地留在了堆栈中。希望有用

于 2011-05-05T15:51:31.660 回答