我正在为一些后台服务运行延迟作业,直到最近,所有这些服务都是孤立运行的,例如发送电子邮件、写报告等。
我现在需要一个delayed_job,作为它的最后一步,来提交另一个delayed_job。
- delay.deploy() - 当delayed_job 运行它时,它会触发一个部署操作,最后一步是...
- delay.update_status() - 当delayed_job 运行这个作业时,它会检查我们开始的部署的状态。如果部署仍在进行中,我们再次调用 delay.update_status(),如果部署已停止,我们将最终部署状态写入数据库记录。
第 1 步工作正常 - 5 秒后,delayed_job 启动部署,开始部署,然后调用 delay.update_status()。
但是在这里,update_status() 不是在 5 秒内启动,delayed_job 进入了一个繁忙的循环,触发了一堆 update_status 调用,并且在没有暂停的情况下非常努力地循环。
我可以看到所有这些调用都填满了日志,服务器变慢了,直到达到 update_status 的结束条件(部署最终成功或失败),然后一切又恢复平静。
我是否错误地使用了 Delayed_Job::delay(),我是否缺少此用例的基本原则?