部署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 操作失败

digitalocean

将 Spring Boot - Angular 应用程序部署到 digitalocean

在 digitalocean 上部署后未加载静态文件

使用 nginx gunicorn 在 digitalocean 上部署 django react