Heroku delay_job 工作人员在部署期间被杀

Bry*_*anP 5 heroku worker delayed-job

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

这里的问题是这些作业永远不会重新排队,因为我的数据库中的 delay_job 表显示它们仍处于锁定状态并正在运行,即使曾经为它们提供服务的工作人员早已死亡。

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

Bud*_*ddy 4

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

通过在初始化程序中添加以下内容,可以使用此设置在 TERM 信号上引发异常:

Delayed::Worker.raise_signal_exceptions = :term
Run Code Online (Sandbox Code Playgroud)

此答案中的更多信息: https ://stackoverflow.com/a/16811844/1715829