首页 文章

在rails 3 app中安排任务

提问于
浏览
1

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

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

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

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

谢谢

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!}
    

    其中每日,每周,每月都是模型的命名范围:

    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,但它运作良好,我很好地保持在堆栈内 . 希望这很有用

相关问题