Rails
capistrano
rubygems
sidekiq

Capistrano-sidekiqのすすめ

Introduction

かなり前だが、弊アプリケーションにsidekiqを導入して、gem capistrano-sidekiqでデプロイ時にプロセスの起動・再起動をしていたが、ある環境だけsidekiqのプロセスを立ち上げたくない場合があったので、備忘録として書き留めておきたいと思います。

Dependencies

Gemfile.lock
sidekiq (5.0.4)
sidekiq-pro (3.7.1)
capistrano (3.6.1)
capistrano-sidekiq (0.10.0)

How to use

Capfile
require "capistrano/sidekiq"

基本的にCapfileにrequireしてあげるだけで、sidekiq:add_default_hooksタスクが走ります。

task :add_default_hooks do
  after 'deploy:starting',  'sidekiq:quiet'
  after 'deploy:updated',   'sidekiq:stop'
  after 'deploy:published', 'sidekiq:start'
  after 'deploy:failed', 'sidekiq:restart'
end

これは、
capistrano-sidekiq/sidekiq.rake at master · seuros/capistrano-sidekiq · GitHub

capistrano-sidekiq/lib/capistrano/tasks/sidekiq.rake
set :sidekiq_default_hooks, true

がデフォルトでtrueになっているためです。

なので、特定の環境でsidekiq:add_default_hooksタスクを実行しないようにするには、

config/deploy/**.rb
set :sidekiq_default_hooks, false

もしくは、プロセスがある場合は落とす処理を書いてあげる場合は、

config/deploy.rb
if fetch(:stage) == :hoge
  set :sidekiq_default_hooks, false
  after 'deploy:starting', 'sidekiq:quiet'
  after 'deploy:updated', 'sidekiq:stop'
end

で、環境ごとの制御ができると思います。

others

$ bundle exec cap -T sidekiq
cap sidekiq:quiet            # Quiet sidekiq (stop processing new tasks)
cap sidekiq:respawn          # Respawn missing sidekiq processes
cap sidekiq:restart          # Restart sidekiq
cap sidekiq:rolling_restart  # Rolling-restart sidekiq
cap sidekiq:start            # Start sidekiq
cap sidekiq:stop             # Stop sidekiq

については、

capistrano-sidekiq/lib/capistrano/tasks/sidekiq.rake
の各タスクのコードを見た方がわかりやすいので説明は省略します。

Reference

gem capistrano-sidekiq
gem capistrano-sidekiq wiki