Ruby on rails Rails中的动态作业调度

Ruby on rails Rails中的动态作业调度,ruby-on-rails,scheduled-tasks,Ruby On Rails,Scheduled Tasks,我已经看过很多Rails的调度库,我希望有人能帮我选择一个,因为没有一个能完全满足我的要求。这是一个相当常见的用例: 我们有许多报告,我们希望让用户设置他们希望何时以及多久通过邮件向他们发送一份特定报告的时间和频率。用户需要能够查看他们已计划的报告列表,并且应该能够取消或更改现有计划的报告。计划作业应在服务器重新启动后仍然有效。目前,我并不担心只在rails服务器集群中的单个节点上运行作业 看起来不错,但我必须编写代码来持久化作业,并在rails重新启动时重新启动它们 处理持久性,但我不知道如

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

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

  • 看起来不错,但我必须编写代码来持久化作业,并在rails重新启动时重新启动它们
  • 处理持久性,但我不知道如何按常规计划运行作业,除非可能在作业运行的新时间重新安排作业
  • 与似乎非常接近,但我希望避免将redis添加到堆栈中,并且我可能会尝试在rails中重新实现一些UI,以便用户可以添加/删除/管理作业,如果它可以使用与应用程序其余部分相同的ActiveRecord后端,那就太好了

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

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


有了上面的两个库,您就有了所有的基础。

出于完全相同的原因,我决定不使用resque。相反,我们也选择了延迟作业,事实上,作业做的最后一件事是重新安排作业下次再次运行。

我的公司生产CloudQuartz(),它允许您通过API安排作业,并在作业即将运行时获得回调


它有一个web UI向您显示作业、作业趋势和状态,但除非您使用API,否则此UI不会向您的客户开放。希望这对您有所帮助。

使用rufus创建延迟工作怎么样?+1,使用延迟工作很长时间,上周增加了时钟,一切顺利,没有任何问题。