Heroku delayed_job 名工人在部署期间死亡

Heroku delayed_job workers killed during deployment

在 Heroku 上,我使用 delayed_job 到 运行 异步任务。一切都很好,直到我执行 git push heroku master 然后 Heroku 环境杀死了所有正在处理的工作线程。

这里的问题是这些作业永远不会重新排队,因为我的数据库中的 delayed_job table 显示它们仍然处于锁定状态并且 运行ning,即使工作人员曾经为他们服务的人早就死了。

如何防止这种情况发生?我希望 Heroku 在关闭之前等待所有正在进行的延迟作业完成或出错,或者至少终止它们并允许在服务器恢复后为它们分配新的工作人员 post-reboot来自我的更新应用的更改。

看来您可以配置 DJ 来处理 SIGTERM 并将正在进行的作业标记为失败(这样它们将再次重新启动):

Use this setting to throw an exception on TERM signals by adding this in your initializer:

Delayed::Worker.raise_signal_exceptions = :term

此答案中的更多信息: