lib/sidekiq-scheduler/capistrano.rb



Capistrano::Configuration.instance.load do
  before 'deploy',         'sidekiq_scheduler:quiet'
  after  'deploy:stop',    'sidekiq_scheduler:stop'
  after  'deploy:start',   'sidekiq_scheduler:start'
  after  'deploy:restart', 'sidekiq_scheduler:restart'

  _cset(:sidekiq_timeout) { 10 }
  _cset(:sidekiq_role) { :app }

  namespace :sidekiq_scheduler do

    desc 'Quiet sidekiq-scheduler with sidekiq (stop accepting new work)'
    task :quiet, roles: lambda { fetch(:sidekiq_role) } do
      bundle_cmd = fetch(:bundle_cmd, 'bundle')
      pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
      quiet_cmd = "#{bundle_cmd} exec sidekiqctl quiet #{pid_file}"

      run "cd #{current_path} && if [ -f #{pid_file} ]; then #{quiet_cmd} ; fi"
    end

    desc 'Stop sidekiq-scheduler with sidekiq'
    task :stop, roles: lambda { fetch(:sidekiq_role) } do
      bundle_cmd = fetch(:bundle_cmd, 'bundle')
      pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
      timeout = fetch(:sidekiq_timeout)
      stop_cmd = "#{bundle_cmd} exec sidekiqctl stop #{pid_file} #{timeout}"

      run "cd #{current_path} && if [ -f #{pid_file} ]; then #{stop_cmd} ; fi"
    end

    desc 'Start sidekiq-scheduler with sidekiq'
    task :start, roles: lambda { fetch(:sidekiq_role) } do
      rails_env = fetch(:rails_env, 'production')
      bundle_cmd = fetch(:bundle_cmd, 'bundle')
      log_file = "#{current_path}/log/sidekiq.log 2>&1 &"
      pid_file = "#{current_path}/tmp/pids/sidekiq.pid"
      start_cmd  = "#{bundle_cmd} exec sidekiq-scheduler start "
      start_cmd += "-e #{rails_env} "
      start_cmd += "-C #{current_path}/config/sidekiq.yml "
      start_cmd += "-P #{pid_file} "
      exec_cmd = "nohup #{start_cmd}"

      run "cd #{current_path} ; nohup #{exec_cmd} >> #{log_file}", pty: false
    end

    desc 'Restart sidekiq-scheduler with sidekiq'
    task :restart, roles: lambda { fetch(:sidekiq_role) } do
      stop
      start
    end

  end
end