【问题标题】:scheduling tasks in rails 3 app在 Rails 3 应用程序中安排任务
【发布时间】:2011-03-26 14:42:29
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: ruby ruby-on-rails-3 scheduled-tasks resque


    【解决方案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
    

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

    【讨论】:

    • 这样做的好处是它也适用于像 Heroku 这样的设置,它每天/每小时/等只执行一次 rake cron
    猜你喜欢
    • 2012-01-23
    • 2011-01-30
    • 1970-01-01
    • 2015-07-27
    • 2012-08-24
    • 2020-03-02
    • 2020-10-12
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多