我已经查看了许多 Rails 的调度库,并且我需要一些帮助来选择一个,因为似乎没有一个库能够完全满足我的要求。这是一个相当常见的用例:
我们有许多报告,我们希望用户可以设置何时安排通过邮件向他们发送特定报告的时间和频率。用户需要能够查看他们已计划的报告列表,并且应该能够取消或更改现有的计划报告。计划的作业应该在服务器重新启动后继续存在。目前,我并不担心只在 Rails 服务器集群中的单个节点上运行作业。
- Rufus scheduler看起来不错,但我必须编写代码来保存作业并在 Rails 重新启动时重新启动它们。
- Delayed_job处理持久性,但我看不到如何定期运行作业,除非可能在作业运行时的新时间重新安排作业
- resque与 resque-scheduler看起来非常接近,但我想避免必须将 redis 添加到我们的堆栈中,并且我可能最终会尝试在 Rails 中重新实现一些 UI,以便用户可以添加/删除/管理作业,如果可以的话那就太好了使用与应用程序的其余部分相同的 ActiveRecord 后端。
最佳答案
我建议使用 Delayed::Job 来处理实际作业,因为它会自动为您的用户处理持久性,并且您可以使用 delayed_jobs
表进行管理(允许用户修改/删除作业)他们已经开始了)。
当涉及到自动调度作业时,您可以使用Clockwork gem 。它是由 Heroku 构建的(如果我没记错的话),本质上允许您在 ruby/rails 应用程序中模拟/替换 cron
。
有了上面的两个库,您就已经涵盖了所有基础。
关于ruby-on-rails - Rails 中的动态作业调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030975/