我正在使用延迟作业来管理后台工作。
但是,我有一些需要定期执行的任务。例如,每小时、每天或每周。
现在,当我执行任务时,我会创建一个新任务,以便在一天/一周/一个月内执行。
不过我不是很喜欢。如果出于任何原因,任务没有完全执行,我们不会创建下一个,我们可能会失去任务的执行。
您如何在 Rails 应用程序中管理此类事情(工作延迟)以确保您的常规任务列表保持正确?
我正在使用延迟作业来管理后台工作。
但是,我有一些需要定期执行的任务。例如,每小时、每天或每周。
现在,当我执行任务时,我会创建一个新任务,以便在一天/一周/一个月内执行。
不过我不是很喜欢。如果出于任何原因,任务没有完全执行,我们不会创建下一个,我们可能会失去任务的执行。
您如何在 Rails 应用程序中管理此类事情(工作延迟)以确保您的常规任务列表保持正确?
如果您可以访问 Cron,我强烈推荐无论何时
您可以指定要运行的内容以及在 dead simple ruby 中以什么频率运行,以及何时提供 rake 任务以将其转换为 crontab 并更新系统的 crontab。
如果您无法访问频繁的 cron(就像我没有,因为我们在 Heroku 上),那么 DJ 是您的最佳选择。
你有几个选择。
做你正在做的事。DJ 将重试每个任务一定次数,所以你有一些宽大处理
将创建下一个 DJ 作业的代码放在确保块中,以确保即使在异常或其他不良事件之后也能创建它
创建另一个定期运行的 DJ,检查以确保存在适当的 DJ,如果不存在则创建它们。当然,这和其他选项一样容易出错,因为监视器和实际的 DJ 都在同一个环境中运行,但这是有问题的。
有什么特别的原因为什么您不会将 cron 用于此类事情吗?或者可能是像rufus-scheduler这样更红的东西,它非常易于使用且非常可靠。
如果您不需要排队,我认为这些工具是一种可行的方法。