Sidekiq Manager gem handle sidekiq operations smartly. It includes sidekiq integration for Capistrano deployment.
Add this line to your application's Gemfile:
gem 'sidekiq_manager', github: 'scripbox/sidekiq_manager'And then execute:
$ bundle
Or install it yourself as:
$ gem install sidekiq_manager
To shutdown a sidekiq proccess it can be put on quiet and then stopped using
stop signal but it does not guarantee the completion of jobs already running
and those jobs are forcefully terminated. Some times re-running these time
consuming jobs can be a problem.
Sidekiq Manger comes with a stop_on_complete
signal for sidekiq which stops a sidekiq process only when the process has
finished processing all the jobs.
bundle exec sidekiq_manager sidekiq stop_on_complete --pidfile [PID_FILE] --hostname HOST_NAMEUse -d option to run it as daemon.
This behaviour can be used during deployment also which sends quiet signal at the start of the deployment and does a stop_on_complete & start to bring up the new processes.
Old processes will be stopped once they have finished executing.
This is an improvment over existing capistrano-sidekiq gem.
For Capistrano integration
# Capfile
require 'sidekiq_manager/capistrano/sidekiq'
require 'sidekiq_manager/capistrano/monit' # to require monit tasksBelow is the list of default sidekiq deployment configs:
:sidekiq_log => File.join(shared_path, 'log', 'sidekiq.log')
:sidekiq_config => nil # if you have a config/sidekiq.yml, do not forget to set this.
:sidekiq_queue => nil
:sidekiq_timeout => 10
:sidekiq_roles => :app
:sidekiq_processes => 1
:sidekiq_options_per_process => nil
:sidekiq_concurrency => nil
# sidekiq monit
:sidekiq_monit_templates_path => 'config/deploy/templates'
:sidekiq_monit_conf_dir => '/etc/monit/conf.d'
:sidekiq_monit_use_sudo => true
:monit_bin => '/usr/bin/monit'
:sidekiq_service_name => "sidekiq_#{fetch(:application)}_#{fetch(:sidekiq_env)}" + (index ? "_#{index}" : '')
:sidekiq_user => nil #user to run sidekiq asTo start multiple sidekiq process set sidekiq_processes and options for each process can be set using:
# in your deployment file
set :sidekiq_options_per_process, [
{
pid_label: 'main',
args: "--config /path_to_config/sidekiq.yml"
},
{
pid_label: 'small',
args: "--config /path_to_config/small.sidekiq.yml"
}
]pid_file for each sidekiq process can have a its own label instead of sidekiq-0.pid (default).
To use the functionality of stop_on_complete during deployment:
set :sidekiq_stop_on_complete, trueIf not set it does a normal sidekiq stop.
Note: Supports Capistrano version 3 & above.
Bug reports and pull requests are welcome on GitHub at https://github.com/scripbox/sidekiq_manager.
Deployment functionality within this gem is inspired by capistrano-sidekiq. We have re-used some parts of capistrano-sidekiq but it's architecture unfortunately didn't allow us to extend it easily with the features we needed. Also we preferred some things to work differently and wanted to add more functionality to the gem in future.