部署Cloud66和DigitalOcean的Rails不会影响当前正在运行的sidekiq进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署Cloud66和DigitalOcean的Rails不会影响当前正在运行的sidekiq进程相关的知识,希望对你有一定的参考价值。
我用Ruby(2.4.1)创建了Rails(版本5)应用程序。我正在使用DigitalOcean实例和Cloud66进行部署。我正在使用Sidekiq进行后台处理。我的每个部署都会从sidekiq中杀死一些长时间运行的进程,但这并没有重试。 sidekiq中的每个任务都更重要,因此我希望在不影响这些工作的情况下进行部署。有没有办法在不影响sidekiq当前正在运行的进程的情况下进行部署?
提前致谢。
Sidekiq支持正常关闭,这意味着它可以为运行的作业提供一些时间。默认情况下,我相信这是30秒。
您可以在config/sidekiq.yml
中调整等待时间:
:timeout: 120
有关更多信息:https://github.com/mperham/sidekiq/wiki/Signals
最终我找到了解决方案。
我已经使用预部署挂钩在开始部署之前发送TSTP,然后发送TERM以正常关闭sidekiq进程。因此,在开始部署之前,所有sidekiq进程都将被优雅地杀死,并且这些作业将使用最新部署创建的sidekiq进程执行。
TSTP - 这将停止从redis接收即将到来的任务。
TERM - 这将在-t timeout_value
选项中提到的时间内终止进程,假设进程未再次完成,作业将被推入队列并且作业将再次执行。
注意:如果从一开始就再次执行相同的任务没有问题,请使用此方法。
以上是关于部署Cloud66和DigitalOcean的Rails不会影响当前正在运行的sidekiq进程的主要内容,如果未能解决你的问题,请参考以下文章
部署 Vue.js + Node + MySQL + NginX 应用程序的问题@DigitalOcean
部署到 DigitalOcean 时 GitHub 操作失败