В качестве альтернативы сценарию выскочки вы можете использовать Capistrano и Capistrano-Sidekiq для управления этими Sidekiqs.
У нас есть Sidekiq, работающий на 3 машинах и имеющий хороший опыт работы с этими двумя библиотеками/инструментами.
Примечание: в настоящее время мы используем старую версию Capistrano (2.15.5)
В нашей архитектуре, три машины немного настроены на развертывании. Это привело нас, чтобы разбить наш Capistrano развернуть сценарии машиной, чтобы мы могли настроить некоторые классы, управлять Sidekiq и т.д. Наши Capistrano файлы структурированы что-то вроде этого:
- config/
- deploy.rb
- deploy/
- gandalf.rb
- gollum.rb
- legolas.rb
С Capistrano-sidekiq, мы можем контроль, ну, Sidekiq :) в любое время (во время развертывания или иначе). Мы создали аспекты Sidekiq нашего Deploy сценариев следующим образом:
# config/deploy.rb
# global sidekiq settings
set :sidekiq_default_hooks, false
set :sidekiq_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiq"
set :sidekiqctl_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiqctl"
set :sidekiq_role, :app
set :sidekiq_pid, "#{current_path}/tmp/pids/sidekiq.pid"
set :sidekiq_env, fetch(:rack_env, fetch(:rails_env, fetch(:default_stage)))
set :sidekiq_log, File.join(shared_path, 'log', 'sidekiq.log')
# config/deploy/gandalf.rb
# Custom Sidekiq settings
set :sidekiq_timeout, 30
set :sidekiq_processes, 1
namespace :sidekiq do
# .. code omitted from methods and tasks for brevity
def for_each_process(&block)
end
desc 'Quiet sidekiq (stop accepting new work)'
task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
end
desc 'Stop sidekiq'
task :stop, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
end
desc 'Start sidekiq'
task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
end
desc 'Restart sidekiq'
task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do
end
end
Когда мне нужно перезапустить один из моих экземпляров Sidekiq, я могу просто пойти на мой терминал и выполнить следующие действия:
$ bundle exec cap gandalf sidekiq:restart
$ bundle exec cap gollum sidekiq:stop
Это сделало управление Sidekiq совершенно безболезненным для нашей команды и подумало, что стоит поделить в случае, если что-то подобное поможет вам.