Skip to content

Instantly share code, notes, and snippets.

@paracycle
Created September 18, 2013 13:50
Show Gist options
  • Save paracycle/6609417 to your computer and use it in GitHub Desktop.
Save paracycle/6609417 to your computer and use it in GitHub Desktop.
sidekiq capistrano v3 tasks
namespace :load do
task :defaults do
set :sidekiq_timeout , -> { 10 }
set :sidekiq_role , -> { :app }
set :sidekiq_pid , -> { "#{current_path}/tmp/pids/sidekiq.pid" }
set :sidekiq_processes , -> { 1 }
set :rbenv_map_bins , fetch(:rbenv_map_bins).concat(%w(sidekiq sidekiqctl))
end
end
def for_each_process(&block)
fetch(:sidekiq_processes).times do |idx|
yield((idx == 0 ? "#{fetch(:sidekiq_pid)}" : "#{fetch(:sidekiq_pid)}-#{idx}"), idx)
end
end
def sidekiq_running?(pid_file)
return test("[ -d #{current_path} ]") &&
test("[ -f #{pid_file} ]") &&
test("kill -0 `cat #{pid_file}`")
end
namespace :sidekiq do
desc "Quiet sidekiq (stop accepting new work)"
task :quiet do
on roles fetch(:sidekiq_role) do
for_each_process do |pid_file, idx|
if sidekiq_running?(pid_file)
within current_path do
execute :sidekiqctl, "quiet", pid_file
end
else
warn 'Sidekiq is not running'
end
end
end
end
desc "Stop sidekiq"
task :stop do
on roles fetch(:sidekiq_role) do
for_each_process do |pid_file, idx|
if sidekiq_running?(pid_file)
within current_path do
execute :sidekiqctl, "stop", pid_file, fetch(:sidekiq_timeout)
end
else
warn 'Sidekiq is not running'
end
end
end
end
desc "Start sidekiq"
task :start do
rails_env = fetch(:rails_env, "production")
on roles fetch(:sidekiq_role) do
for_each_process do |pid_file, idx|
within current_path do
execute :sidekiq, "--verbose --daemon --tag #{fetch(:application)} --environment #{rails_env} --pidfile #{pid_file} --config #{current_path}/config/sidekiq.yml --index #{idx} --require #{current_path} --logfile #{shared_path}/log/sidekiq.log; sleep 15;"
end
end
end
end
desc "Restart sidekiq"
task :restart do
on roles fetch(:sidekiq_role) do
invoke "sidekiq:stop"
invoke "sidekiq:start"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment