web-dev-qa-db-fra.com

Comment exécuter sidekiq sur un serveur de production?

J'ai un serveur avec Apache + Passager.

Comment vais-je utiliser sidekiq en production? Toute configuration nécessaire pour exécuter le

bundle exec sidekiq

Merci

41
Debadatt

bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production

-d, Processus de démonisation

-L, chemin du fichier journal en écriture

-C, chemin du fichier de configuration YAML

-e, Environnement d'application

115
Yersin

Une meilleure solution que d'utiliser l'indicateur daemonization -d consiste à utiliser le superviseur de processus fourni par votre système d'exploitation. C'est aussi le recommandation donnée par le wiki du sidekiq gem :

Je recommande fortement aux personnes de ne pas utiliser l'indicateur -d mais d'utiliser un superviseur de processus tel que systemd ou upstart pour gérer Sidekiq (ou tout autre démon de serveur). Cela garantit que Sidekiq redémarrera immédiatement s'il se bloque pour une raison quelconque.

Le wiki fournit un exemple de fichiers de configuration pour upstart et systemd qui se trouve dans le répertoire "examples" du référentiel .

[~ # ~] note [~ # ~] Sur mon serveur CentOS 7, j'utilise rvm (Ruby Version Manager). Je devais effectuer une étape supplémentaire pour que mon script systemd (/etc/systemd/system/sidekiq.service) puisse démarrer et arrêter de manière fiable sidekiq, même dans le cas où mon Ruby et/ou les chemins gemset changent dans le futur. La directive la plus importante est "ExecStart", qui ressemble à ceci dans mon script:

ExecStart=/usr/local/rvm/wrappers/surveil/bundler exec sidekiq -e production -L log/sidekiq.log -C config/sidekiq.yml

La partie du chemin "/ usr/local/rvm/wrappers/surveil" est en fait un lien symbolique, que je recrée avec l'aide de 'alias rvm' lors du déploiement pour qu'il pointe toujours vers la version et le gemset de l'application Ruby), qui pourraient tous deux changer d'un déploiement à l'autre. Pour ce faire, vous devez créer une tâche de rake qui s'exécute pendant le déploiement et effectue l'équivalent des actions suivantes:

rvm alias delete surveil
rvm alias create surveil Ruby-#{new_Ruby_version}@#{new_gemset_name}

En configurant cet alias/lien symbolique lors du déploiement, je peux en toute sécurité laisser le script systemd intact et il continuera à fonctionner correctement. Cela s'explique par le fait que le chemin "/ usr/local/rvm/wrappers/surveil/bundler" pointe toujours vers la version correcte de bundler et bénéficie donc de la magie du bundler qui permet à ses cibles de s'exécuter dans l'environnement configuré Ruby/gem de l'application.

18
Brian Warren

Vous devriez pouvoir démarrer Sidekiq en tant que processus d'arrière-plan (démon) en passant l'argument -d lorsque vous le démarrez:

bundle exec sidekiq -d.

Bien que cette réponse fonctionne pour vous maintenant, sachez que si le processus sidekiq se bloque pour une raison quelconque, il devra être redémarré manuellement . Voici un bon point de départ pour découvrir des méthodes plus robustes d’exécution de sidekiq en production: https://github.com/mperham/sidekiq/wiki/Deployment

15
alexpls