定期推迟工作

Dam*_*IEU 7 ruby cron ruby-on-rails delayed-job

我正在使用延迟作业来管理后台工作.
但是我有一些需要定期执行的任务.例如,每小时,每天或每周.

现在,当我执行任务时,我创建一个新的,在一天/周/月内执行.

但是我真的不喜欢它.如果由于任何原因,任务未完全执行,我们不会创建下一个任务,我们可能会丢失任务的执行.

你如何在rails应用程序中管理那种事情(延迟工作)以确保你的常规任务列表仍然正确?

小智 5

如果你有权访问Cron,我强烈推荐Whenever

http://github.com/javan/whenever

您可以指定要运行的内容以及死亡简单ruby中的频率,并在每次提供rake任务时将其转换为crontab并更新系统的crontab.

如果你没有访问频繁的cron(就像我没有,因为我们在Heroku上),那么DJ就是你要走的路.

你有几个选择.

  1. 做你正在做的事.DJ会重复每次任务一定次数,所以你在那里有一些宽容

  2. 将创建下一个DJ作业的代码放在ensure块中,以确保即使在异常或其他不良事件之后也可以创建它

  3. 创建另一个定期运行的DJ,检查以确保存在适当的DJ,如果不存在则创建它们.当然,这与其他选项一样容易出错,因为显示器和实际的DJ都在同一个环境中运行,但它确实存在.