Manage sidekiq workers using deployment setup and Capistrano
In real world, most of the Rails applications would be having a Sidekiq instance as its companion in production systems. And it's a necessary thing to have some sort of mechanism to manage your Sidekiq instance with your deployment setup.
In this post, I am going to throw light on some of the options that you have with managing Sidekiq workers with the deployment setup capistrano.
- using
capistrano-sidekiq
gem. - using custom tasks
Option1: capistrano-sidekiq
The first one is using capistrano-sidekiq
gem which takes care of the hassle for you
First add capistrano-sidekiq
to your Gemfile:
gem 'capistrano-sidekiq'
After you do a:
bundle install
Require capistrano-sidekiq
in your Capfile:
require 'capistrano/sidekiq'
The gem comes with a lot of options to customize your Sidekiq instance, you can see the various available options from the github page
sidekiq default hooks
capistrano-sidekiq
adds some default hooks when capistrano-rails
is installed.
task :add_default_hooks do
after 'deploy:starting', 'sidekiq:quiet'
after 'deploy:updated', 'sidekiq:stop'
after 'deploy:reverted', 'sidekiq:stop'
after 'deploy:published', 'sidekiq:start'
end
== Sidekiq will start or stop automatically during Rails deployments.== Just set sidekiq_default_hooks
to false if you don't want this to happen.
You also can start/stop Sidekiq instances manually anytime using:
cap production sidekiq:start
Note: This option is prefered if you need advanced control of your sidekiq workers.
Option:2: Your own capistrano task
If you dont want to manage your sidekiq instances using capistrano-sidekiq
gem you can simply add a custom task in your code like:
task :restart_sidekiq do
on roles(:worker) do
execute :service, "sidekiq restart"
end
end
after "deploy:published", "restart_sidekiq"
This will restart your sidekiq instance whenever capistrano publishes the artifacts to your server after a deployment.