定期推迟工作

时间:2009-10-28 10:52:20

标签: ruby-on-rails ruby cron delayed-job

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

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

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

如何管理rails应用中的那类事情(延迟工作),以确保您的常规任务列表仍然正确?

2 个答案:

答案 0 :(得分:5)

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

http://github.com/javan/whenever

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

如果您无法访问频繁的cron(就像我没有访问,因为我们使用Heroku),那么DJ就是您的选择。

你有两个选择。

  1. 做你正在做的事。 DJ会重复每次任务一定次数,所以你有一些宽大处理

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

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

答案 1 :(得分:1)

你有什么特别的理由不使用cron来做这类事吗? 或者像rufus-scheduler这样的东西更像红宝石,非常easy to use且非常可靠。

如果您不需要排队,我认为这些工具是一种方法。