关于计划任务:Rails中的动态作业计划

Dynamic job scheduling in Rails

我已经看了很多Rails调度库,我希望有人能帮我选择一个,因为没有一个库能完全满足我的需求。这是一个相当常见的用例:

我们有许多报告,我们希望让用户设置他们希望计划何时以及多久通过邮件向他们发送一个特定报告。用户需要能够看到他们已计划的报告列表,并且应该能够取消或更改现有的计划报告。计划的作业应该能够在服务器重新启动后继续运行。目前,我不担心只在Rails服务器集群中的单个节点上运行作业。

  • Rufus调度程序看起来不错,但我必须编写代码来持久化作业,并在Rails重新启动时重新启动它们。
  • 延迟作业处理的是持久性,但我看不到如何按常规计划运行作业,除非可能在作业运行时重新安排新的时间。
  • Resque与Resque调度程序的关系似乎非常密切,但我希望避免不得不向堆栈中添加Redis,我可能最终会尝试在Rails中重新实现一些UI,以便用户可以添加/删除/管理作业,如果它可以使用与应用程序其余部分相同的ActiveRecord后端,那就太好了。


我建议对实际作业使用delayed::job,因为它会自动为用户处理持久性,您可以使用delayed_jobs表进行管理(允许用户修改/删除已启动的作业)。

当它涉及到自动调度作业时,您可以使用时钟宝石。它是由Heroku构建的(如果我没有弄错的话),基本上允许您在Ruby/Rails应用程序中模拟/替换cron

有了上面的两个库,您就可以覆盖所有的基础了。


我会以完全相同的理由决定不进行改型。相反,我们也选择了延迟的工作,事实上,工作做的最后一件事,就是重新安排工作,下次再运行。


我的公司生产CloudQuartz(www.thecloudblocks.com),它允许你通过一个API来调度作业,并在作业运行时获得回调。

它有一个Web UI来向您展示作业、它们的趋势和状态,但是除非您使用该API,否则该UI不会向您的客户开放。希望你觉得这有帮助。