gpt4 book ai didi

ruby-on-rails - 延迟作业重启 + Capistrano 最佳实践

转载 作者:行者123 更新时间:2023-12-03 23:58:59 25 4
gpt4 key购买 nike

我只是想了解使用 capistrano 重新启动延迟工作 worker 的最佳实践。我有一群 worker 处理长时间的工作(最多 10 分钟)。

在工作人员正在处理的部署期间,我遇到了两种情况-

1)

我在部署之前停止延迟的工作人员:重启任务并在部署:重启任务后再次启动它们。

但是在这种情况下,在延迟的作业完成之前它不会重新启动我的应用程序(这可能没问题 - 但是 cap 部署脚本实际上就在那里,直到作业完成并且它可以停止所有工作人员),然后再继续重新启动应用程序任务。

2)
我还尝试在重启任务后停止/启动 delayjobs 工作人员 - 但这导致了各种戏剧性的情况,即任务将在没有等待的情况下停止,delayedjobs 表将它们列出并分配给一个 PID 不存在的工作人员!

还有其他选择吗?或者我是否被迫像场景 1 中提到的那样等待。

非常感谢。

编辑:我刚刚意识到场景 1 .. 它不会等待!即使停止任务还没有完成,它也会强行杀死我的 worker !

 ** [out] delayed_job: trying to stop process with pid 9630...
** [out] delayed_job: process with pid 9630 won't stop, we forcefully kill it...
** [out]
** [out] delayed_job: process with pid 9630 successfully stopped.

最佳答案

如果您的部署更改更改了数据库架构,那么您将不得不等待。

如果没有,您可以设置一个标志,让 worker 在每项工作结束时检查。部署时,您设置标志,一旦长时间运行的工作人员完成,它会通过执行新工作人员来替换自己。这样你就永远不会真正启动和停止工作人员——他们只是一直在运行,并且会在开始下一项工作时加载最新的代码。

关于ruby-on-rails - 延迟作业重启 + Capistrano 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9697273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com