我正在使用延迟工作来管理后台工作 但是我有一些需要定期执行的任务。例如,每小时,每天或每周。
现在,当我执行任务时,我创建了一个新的,每天/每周/每月执行。
但我真的不喜欢它。如果由于任何原因,任务没有完全执行,我们不会创建下一个任务,我们可能会丢失任务的执行。
如何管理rails应用中的那类事情(延迟工作),以确保您的常规任务列表仍然正确?
答案 0 :(得分:5)
如果您有权访问Cron,我强烈推荐Whenever
http://github.com/javan/whenever
您可以指定要运行的内容以及死亡简单ruby中的频率,以及每次提供rake任务以将其转换为crontab并更新系统的crontab时。
如果您无法访问频繁的cron(就像我没有访问,因为我们使用Heroku),那么DJ就是您的选择。
你有两个选择。
做你正在做的事。 DJ会重复每次任务一定次数,所以你有一些宽大处理
将创建下一个DJ作业的代码放在一个确保块中,以确保即使在异常或其他不良事件之后也能创建它
创建另一个定期运行的DJ,检查以确保存在相应的DJ,如果不存在则创建它们。当然,这与其他选项一样容易出错,因为显示器和实际的DJ都在同一个环境中运行,但它确实存在。
答案 1 :(得分:1)
你有什么特别的理由不使用cron来做这类事吗? 或者像rufus-scheduler这样的东西更像红宝石,非常easy to use且非常可靠。
如果您不需要排队,我认为这些工具是一种方法。