14
5

More than 5 years have passed since last update.

capistrano-sidekiqを使うのをやめる

Posted at

capistrano-sidekiq を使ったデプロイが不定期に事故るので直した話

前提

  • capistrano-sidekiqv0.5.4 を使ってた(最新版の1個前)
  • capistranoでデプロイ後にsidekiqがバグる
    • sidekiqのプロセスが古いままで再起動ができておらず、sidekiq.pid を見ても立ち上がってるプロセスとズレてておかしい
    • sidekiqが指定されたプロセス以上の数が立ち上がる

対応方法

capistrano-sidekiq のタイミングがよくわからんので、やめて自前でコマンド実行

config/deploy.rb
# sidekiq
set :sidekiq_pid_path, -> { File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid') }

namespace :sidekiq do
  desc 'sidekiq stop'
  task :stop do
    on roles(:app) do
      execute "kill -USR1 `cat #{fetch :sidekiq_pid_path}`; true"
    end
  end
  before 'deploy:updated',    'sidekiq:stop'

  desc 'sidekiq kill'
  task :kill do
    on roles(:app) do
      execute "kill -TERM `cat #{fetch :sidekiq_pid_path}`; true"
    end
  end
  after  'deploy:finishing',  'sidekiq:kill'

end

シンプルにデプロイ前にstoppingし、完了したら完全にkillします
参考: http://qiita.com/pekepek/items/8eb302c997335fbce854

その後、monitがsidekiqを叩き起こすようになってます。

却下案

capistrano-sidekiq を最新版にしたらこの問題が解決しないかと検討したが、pidのファイル名になぜか0が追加される事象に遭遇。
Githubを覗いたら、 Change pidfile handling, always add index to pidfile name by w1mvy でそうするような処理が入ってた。

インフラ的な変更も入るし、そもそもこのgemを上げたら前提のところに書いてある問題が解決されるのかわからなかったため、シェルスクリプトでやることにしました。。。

一言

結局、capistranoがsymlinkを入れ替える前にsidekiqが起動してるのかその辺が結局よくわからなかったが、自前でやったら安定しましたよというお話。

14
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5