工作在进入第二项任务时进入繁忙的循环
我正在为一些后台服务运行delayed_job,直到最近,所有这些服务都是孤立运行的,例如发送电子邮件,编写报告等。
我现在需要一个delayed_job作为最后一步,提交另一个delayed_job。
第1步工作正常 - 5秒后,delayed_job启动部署,启动部署,然后调用delay.update_status()。
但是在这里,而不是update_status()在5秒内启动,delayed_job进入一个繁忙的循环,触发一堆update_status调用,并且在没有暂停的情况下很难循环。
我可以看到日志满了所有这些调用,服务器变慢,直到达到update_status的最终条件(部署最终成功或失败),并且事情再次变得安静。
我是否错误地使用了Delayed_Job :: delay(),我错过了这个用例的一个基本概念吗?
好吧,事实证明这是“预期行为” - 如果您已经在运行delayed_job的代码中,并且再次调用.delay(),而没有指定延迟,它将立即运行。 您需要添加参数run_at:
delay(queue: :deploy, run_at: 10.seconds.from_now).check_status
查看Google小组中的讨论
链接地址: http://www.djcxy.com/p/65781.html上一篇: job going into a busy loop when lodging second task
下一篇: Delayed Processing Jobs in Ruby: How much is not blocking my path