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