2011-08-11 45 views
13

我已经查看了Rails的一些调度库,并且我希望有一些帮助选择它们,因为没有一个满足我的要求。这是一个相当常见的用例:Rails中的动态作业调度

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

  • Rufus scheduler看起来不错,但我不得不编写代码来持续的工作和轨道重新启动时重新启动它们。
  • Delayed_job涉及持久性,但我看不出如何在定期运行的作业,除了可能在新的时间重新安排工作,当它运行
  • resqueresque-scheduler似乎很接近,但我想避免必须添加redis到我们的堆栈,我最终可能会试图在rails中重新实现一些UI,以便用户可以添加/删除/管理作业,如果它可以使用与其余部分相同的ActiveRecord后端应用程序。
+3

如何使用rufus创建delayed_jobs? – Zabba

回答

7

我会建议使用延迟::工作的实际工作,因为它会自动处理持久性的用户,可以使用delayed_jobs表管理(允许用户修改/删除工作,他们已经启动)。

当涉及到自动调度作业时,您可以使用Clockwork gem。它由Heroku构建(如果我没有弄错),本质上允许你在ruby/rails应用中模拟/替换cron

有了上面的两个库,你已经覆盖了所有的基础。

+0

+1,使用delayed_job很长一段时间,上周增加了发条,一切都很顺利,没有任何打嗝。 – rubish

1

我会根据完全相同的原因决定使用resque。相反,我们也选择了延迟工作,事实上,最后一件工作就是重新安排工作,以便下次再次运行。

-1

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

它有一个Web UI向你展示工作,他们的趋势和他们的状态,但除非你使用API​​,否则这个UI将不会对你的客户开放。希望你觉得这有帮助。