- 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
- 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
- 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)
- 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.