【问题标题】:Heroku delayed_job workers killed during deploymentHeroku delay_job 工作人员在部署期间被杀
【发布时间】:2015-07-06 15:44:37
【问题描述】:

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

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

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

【问题讨论】:

  • delayed_job 不支持restart 参数吗?这不太理想,因为等待会更干净,但实际上,等待会超时,最终会终止工作。

标签: heroku delayed-job worker


【解决方案1】:

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

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

Delayed::Worker.raise_signal_exceptions = :term

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多