lib/capistrano/tasks/capistrano2.rb in capistrano-sidekiq-0.0.1 vs lib/capistrano/tasks/capistrano2.rb in capistrano-sidekiq-0.0.2

- old
+ new

@@ -1,13 +1,20 @@ Capistrano::Configuration.instance.load do _cset(:sidekiq_default_hooks) { true } + + _cset(:sidekiq_pid) { File.join(shared_path, 'pids', 'sidekiq.pid') } + _cset(:sidekiq_env) { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) } + _cset(:sidekiq_log) { File.join(shared_path, 'log', 'sidekiq.log') } + + _cset(:sidekiq_options) { nil } + _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_pid) { "#{current_path}/tmp/pids/sidekiq.pid" } + + _cset(:sidekiq_timeout) { 10 } + _cset(:sidekiq_role) { :app } _cset(:sidekiq_processes) { 1 } if fetch(:sidekiq_default_hooks) before 'deploy:update_code', 'sidekiq:quiet' after 'deploy:stop', 'sidekiq:stop' @@ -16,11 +23,16 @@ end namespace :sidekiq do def for_each_process(&block) fetch(:sidekiq_processes).times do |idx| - yield((idx == 0 ? "#{fetch(:sidekiq_pid)}" : "#{fetch(:sidekiq_pid)}-#{idx}"), idx) + pid_file = if idx.zero? && fetch(:sidekiq_processes) <= 1 + fetch(:sidekiq_pid) + else + fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid") + end + yield(pid_file, idx) end end desc 'Quiet sidekiq (stop accepting new work)' task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do @@ -36,12 +48,25 @@ end end desc 'Start sidekiq' task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do - rails_env = fetch(:rails_env, 'production') for_each_process do |pid_file, idx| - run "cd #{current_path} ; nohup #{fetch(:sidekiq_cmd)} -e #{rails_env} -i #{idx} -P #{pid_file} >> #{current_path}/log/sidekiq.log 2>&1 &", :pty => false + args = [] + args.push "--index #{idx}" + args.push "--pidfile #{pid_file}" + args.push "--environment #{fetch(:sidekiq_env)}" + args.push "--logfile #{fetch(:sidekiq_log)}" if fetch(:sidekiq_log) + args.push fetch(:sidekiq_options) + + if defined?(JRUBY_VERSION) + args.push ">/dev/null 2>&1 &" + logger.info 'Since JRuby doesn\'t support Process.daemon, Sidekiq will not be running as a daemon.' + else + args.push "--daemon" + end + + run "cd #{current_path} ; #{fetch(:sidekiq_cmd)} #{args.compact.join(' ')} ", :pty => false end end desc 'Restart sidekiq' task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do