部署Cloud66和DigitalOcean的Rails不会影响当前正在运行的sidekiq进程

问题描述 投票:0回答:2

我用Ruby(2.4.1)创建了Rails(版本5)应用程序。我正在使用DigitalOcean实例和Cloud66进行部署。我正在使用Sidekiq进行后台处理。我的每个部署都会从sidekiq中杀死一些长时间运行的进程,但这并没有重试。 sidekiq中的每个任务都更重要,因此我希望在不影响这些工作的情况下进行部署。有没有办法在不影响sidekiq当前正在运行的进程的情况下进行部署?

提前致谢。

ruby-on-rails deployment sidekiq
2个回答
1
投票

Sidekiq支持正常关闭,这意味着它可以为运行的作业提供一些时间。默认情况下,我相信这是30秒。

您可以在config/sidekiq.yml中调整等待时间:

:timeout: 120

有关更多信息:https://github.com/mperham/sidekiq/wiki/Signals


1
投票

最终我找到了解决方案。

我已经使用预部署挂钩在开始部署之前发送TSTP,然后发送TERM以正常关闭sidekiq进程。因此,在开始部署之前,所有sidekiq进程都将被优雅地杀死,并且这些作业将使用最新部署创建的sidekiq进程执行。

TSTP - 这将停止从redis接收即将到来的任务。

TERM - 这将在-t timeout_value选项中提到的时间内终止进程,假设进程未再次完成,作业将被推入队列并且作业将再次执行。

注意:如果从一开始就再次执行相同的任务没有问题,请使用此方法。

© www.soinside.com 2019 - 2024. All rights reserved.