lib/capistrano/tasks/capistrano2.rb in capistrano-sidekiq-0.5.2 vs lib/capistrano/tasks/capistrano2.rb in capistrano-sidekiq-0.5.3

- old
+ new

@@ -15,10 +15,11 @@ _cset(:sidekiq_cmd) { "#{fetch(:bundle_cmd, 'bundle')} exec sidekiq" } _cset(:sidekiqctl_cmd) { "#{fetch(:bundle_cmd, 'bundle')} exec sidekiqctl" } _cset(:sidekiq_timeout) { 10 } _cset(:sidekiq_role) { :app } + _cset(:sidekiq_processes) { 1 } _cset(:sidekiq_options_per_process) { nil } if fetch(:sidekiq_default_hooks) before 'deploy:update_code', 'sidekiq:quiet' @@ -26,30 +27,46 @@ after 'deploy:start', 'sidekiq:start' before 'deploy:restart', 'sidekiq:restart' end namespace :sidekiq do - def for_each_process(&block) - fetch(:sidekiq_processes).times do |idx| - if idx.zero? && fetch(:sidekiq_processes) <= 1 + def for_each_process(sidekiq_role, &block) + sidekiq_processes = fetch(:"#{ sidekiq_role }_processes") rescue 1 + sidekiq_processes.times do |idx| + if idx.zero? && sidekiq_processes <= 1 pid_file = fetch(:sidekiq_pid) else pid_file = fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid") end yield(pid_file, idx) end end - def quiet_process(pid_file, idx) - run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{pid_file} ; else echo 'Sidekiq is not running'; fi" + def for_each_role + sidekiq_roles = fetch(:sidekiq_role) + + sidekiq_roles = if sidekiq_roles.respond_to?(:to_ary) + sidekiq_roles.to_ary + else + [sidekiq_roles] + end + + sidekiq_roles.to_ary.each do |sidekiq_role| + puts "executing on ##{ sidekiq_role }" if sidekiq_roles.size > 1 + yield(sidekiq_role) + end end - def stop_process(pid_file, idx) - run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} stop #{pid_file} #{fetch :sidekiq_timeout} ; else echo 'Sidekiq is not running' && if [ -f #{pid_file} ] ; then rm #{pid_file} ; fi ; fi" + def quiet_process(pid_file, idx, sidekiq_role) + run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} quiet #{pid_file} ; else echo 'Sidekiq is not running'; fi", roles: sidekiq_role end - def start_process(pid_file, idx) + def stop_process(pid_file, idx, sidekiq_role) + run "if [ -d #{current_path} ] && [ -f #{pid_file} ] && kill -0 `cat #{pid_file}`> /dev/null 2>&1; then cd #{current_path} && #{fetch(:sidekiqctl_cmd)} stop #{pid_file} #{fetch :sidekiq_timeout} ; else echo 'Sidekiq is not running'; fi", roles: sidekiq_role + end + + def start_process(pid_file, idx, sidekiq_role) args = [] args.push "--index #{idx}" args.push "--pidfile #{pid_file}" args.push "--environment #{fetch(:sidekiq_env)}" args.push "--tag #{fetch(:sidekiq_tag)}" if fetch(:sidekiq_tag) @@ -71,38 +88,46 @@ logger.info 'Since JRuby doesn\'t support Process.daemon, Sidekiq will not be running as a daemon.' else args.push '--daemon' end - run "if [ -d #{current_path} ] && [ ! -f #{pid_file} ] || ! kill -0 `cat #{pid_file}` > /dev/null 2>&1; then cd #{current_path} ; #{fetch(:sidekiq_cmd)} #{args.compact.join(' ')} ; else echo 'Sidekiq is already running'; fi", pty: false + run "if [ -d #{current_path} ] && [ ! -f #{pid_file} ] || ! kill -0 `cat #{pid_file}` > /dev/null 2>&1; then cd #{current_path} ; #{fetch(:sidekiq_cmd)} #{args.compact.join(' ')} ; else echo 'Sidekiq is already running'; fi", pty: false, roles: sidekiq_role end desc 'Quiet sidekiq (stop accepting new work)' task :quiet, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do - for_each_process do |pid_file, idx| - quiet_process(pid_file, idx) + for_each_role do |sidekiq_role| + for_each_process(sidekiq_role) do |pid_file, idx| + quiet_process(pid_file, idx, sidekiq_role) + end end end desc 'Stop sidekiq' task :stop, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do - for_each_process do |pid_file, idx| - stop_process(pid_file, idx) + for_each_role do |sidekiq_role| + for_each_process(sidekiq_role) do |pid_file, idx| + stop_process(pid_file, idx, sidekiq_role) + end end end desc 'Start sidekiq' task :start, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do - for_each_process do |pid_file, idx| - start_process(pid_file, idx) + for_each_role do |sidekiq_role| + for_each_process(sidekiq_role) do |pid_file, idx| + start_process(pid_file, idx, sidekiq_role) + end end end desc 'Rolling-restart sidekiq' task :rolling_restart, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do - for_each_process do |pid_file, idx| - stop_process(pid_file, idx) - start_process(pid_file, idx) + for_each_role do |sidekiq_role| + for_each_process(sidekiq_role) do |pid_file, idx| + stop_process(pid_file, idx, sidekiq_role) + start_process(pid_file, idx, sidekiq_role) + end end end desc 'Restart sidekiq' task :restart, roles: lambda { fetch(:sidekiq_role) }, on_no_matching_servers: :continue do