Skip to content

Instantly share code, notes, and snippets.

@maiconkcond
Last active April 20, 2018 02:46
Show Gist options
  • Save maiconkcond/b486b8f6d262bc61ebd70ea6129812e1 to your computer and use it in GitHub Desktop.
Save maiconkcond/b486b8f6d262bc61ebd70ea6129812e1 to your computer and use it in GitHub Desktop.
Capistrano + Sidekiq + Upstart

Capistrano + Sidekiq + Upstart

Anotações importante para auxiliar em possível configuração no futuro.

  1. Criar um arquivo com nome NOME_DO_APP-workers.conf na pasta /etc/init/ com o conteúdo:
description "Manages NOME_DO_APP Sidekiq workers"

start on runlevel [2345]
stop on runlevel [06]

pre-start script
  start sidekiq app=NOME_DO_APP index=0
end script

post-stop script
  stop sidekiq app=NOME_DO_APP index=0
end script
  1. Criar um outro arquivo com nome sidekiq.conf na pasta /etc/init/ com o conteúdo:
description "Sidekiq Background Worker"

#setuid deploy
#setgid deploy
#env HOME=/home/deploy

respawn      
respawn limit 3 30
normal exit 0 TERM
kill timeout 15
    
instance ${app}-${index}

script 
exec /bin/bash <<'EOT'
  # source /home/deploy/.rvm/scripts/rvm
   logger -t sidekiq "Starting process: $app-$index"

  cd /var/www/${app}/current
  exec /usr/local/rvm/bin/rvm-shell -c 'bundle exec sidekiq -i ${index} -e production -q default -q mailers'
EOT
end script                                                                                                                               
  1. Para não ser solicitado senha quando realizar o deploy é necessário informar permissão para executar o serviço:
  • Vá até a pasta /etc/sudoers.d/
  • Crie um arquivo com nome NOME_DO_APP_workers_deploy
  • Adicione o conteúdo: deploy ALL=NOPASSWD:/sbin/restart NOME_DO_APP-workers (deploy é o usuário)
  1. Agora no projeto, vá no arquivo deploy.rb e adicione o conteúdo abaixo:
after 'deploy:starting', 'sidekiq:quiet'
after 'deploy:reverted', 'sidekiq:restart'
after 'deploy:published', 'sidekiq:restart'
.
.
.
namespace :sidekiq do
  task :quiet do
    on roles(:app) do
      puts capture("pgrep -f 'sidekiq (.*) ecursos' | xargs kill -USR1")
    end
  end

  task :restart do
    on roles(:app) do
      sudo 'restart ecursos-workers'
    end
  end

Basicamente, é verificado se o processo do sidekiq ta iniciado caso sim ele é parado para que despois seja reiniciado.

Link Útil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment