【问题标题】:Capistrano not restarting SidekiqCapistrano 没有重新启动 Sidekiq
【发布时间】:2025-12-05 08:00:02
【问题描述】:

我让 Capistrano 将我的应用程序部署到云主机上的 Ubuntu 远程服务器上。它的工作原理是 Sidekiq 不会重新启动。部署后,新的 Sidekiq 作业被卡在队列中,直到它最终重新启动。我目前手动 SSH 进入机器并运行 sudo initctl stop/start workers ,它可以工作。我对 Capistrano 一点也不强,到目前为止我的研究未能找到解决这个问题的方法。我希望我错过了比我更熟悉的人明显的东西。这是我的 /config/deploy.rb 文件的相关部分:

namespace :deploy do
  namespace :sidekiq do
    task :quiet do
      on roles(:app) do
        puts capture("pgrep -f 'workers' | xargs kill -USR1") 
      end
    end

    task :restart do
      on roles(:app) do
        execute :sudo, :initctl, :stop, :workers
        execute :sudo, :initctl, :start, :workers
      end
    end
  end

  after 'deploy:starting', 'sidekiq:quiet'
  after 'deploy:reverted', 'sidekiq:restart'
  after 'deploy:published', 'sidekiq:restart'
end

更新

来自我的回复日志:

 DEBUG [268bc235] Running /usr/bin/env kill -0 $( cat /home/ubuntu/staging/shared/tmp/pids/sidekiq-0.pid ) as ubuntu@159.203.8.242
 DEBUG [268bc235] Command: cd /home/ubuntu/staging/releases/20160806065537 && ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.3" ; /usr/bin/env kill -0 $( cat /home/ubuntu/staging/shared/tmp/pids/sidekiq-0.pid ) )
 DEBUG [268bc235] Finished in 0.471 seconds with exit status 1 (failed).

【问题讨论】:

    标签: ruby-on-rails capistrano sidekiq


    【解决方案1】:

    如果您在 Capfile 中安装并调用了 capistrano-sidekiq gem,我认为您不需要在 deploy.rb 中进行这些配置。

    确保您的 Capfile 中有 require 'capistrano/sidekiq',否则它不会知道调用默认任务。

    【讨论】:

    • 这很简单——我错过了require 'capistrano/sidekiq'
    • 嗯...仍然没有重新启动 - 我以为是我的队列只是加载了作业,直到我手动重新启动。
    • 我不确定发生了什么 - 也许 sidekiq 崩溃了......刚刚运行了另一个部署,队列现在似乎可以工作了。
    最近更新 更多