我正在编写一个rails 3应用程序,它需要在每个用户的自定义计划上执行小任务。计划任务将动态定义。现在我的计划是使用带有redis的resque调度程序。
一旦我为指定任务设置了计划(例如,每48小时运行一次任务A),我想无限期地运行该任务。因此,我希望将这些计划存储在数据库或其他内容中,以防应用程序在重新启动时崩溃,它会再次加载队列这些任务。
Resque是否支持默认情况下将其存储在redis中,还是需要编写自己的自定义内容?我也在看ruby-taskr(http://code.google.com/p/ruby-taskr/)。我不确定taskr是否支持将其存储在数据库中并在启动时注册它?
如果有应用程序/演示我可以查看它也会有所帮助。
由于
答案 0 :(得分: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!}
其中每日,每周,每月都是模型的命名范围:
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,但它运作良好,我很好地保持在堆栈内。希望有用