Rails中的动态作业调度

时间:2011-08-11 18:28:07

标签: ruby-on-rails scheduled-tasks

我已经看过Rails的一些调度库,我想帮助选择一个,因为似乎没有一个能满足我的要求。这是一个相当常见的用例:

我们有很多报告,我们希望让用户在想要安排特定报告通过邮件发送给他们的时间和频率时进行设置。用户需要能够查看他们已安排的报告列表,并且他们应该能够取消或更改现有的计划报告。计划的作业应该在服务器重新启动后继续存在。目前,我并不担心只在一个rails服务器集群中的单个节点上运行作业。

  • Rufus scheduler看起来不错但我必须编写代码来保留作业并在rails重启时重新启动它们。
  • Delayed_job处理持久性但我无法看到如何定期运行作业,除非可能在新的运行时重新安排作业
  • resqueresque-scheduler似乎非常接近,但我想避免将redis添加到我们的堆栈中,我可能最终会尝试重新实现rails中的一些UI,以便用户可以添加/删除/管理作业,如果它可以使用与应用程序其余部分相同的ActiveRecord后端,那就太棒了。

3 个答案:

答案 0 :(得分:7)

我建议将Delayed :: Job用于实际作业,因为它会自动处理用户的持久性,并且您可以使用delayed_jobs表进行管理(允许用户修改/删除他们的作业)我开始了。)

在自动安排作业时,您可以使用Clockwork gem。它是由Heroku构建的(如果我没有记错的话),基本上允许你在ruby / rails应用程序中模拟/替换cron

通过上面的两个库,你可以覆盖所有的基础。

答案 1 :(得分:1)

我会以完全相同的理由决定反对resque。相反,我们也选择了延迟工作,事实上,工作的最后一件事就是重新安排下一次工作的工作。

答案 2 :(得分:-1)

我的公司制作CloudQuartz(www.thecloudblocks.com),它允许您通过API安排作业,并在它们运行时获得回调。

它有一个Web UI,可以显示有关作业,趋势和状态的信息,但除非您使用API​​,否则此UI不会向您的客户开放。希望你觉得这很有帮助。