2009-11-13 3 views
36

Les gars GitHub a récemment publié leur application de traitement d'arrière-plan qui utilise Redis: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resqueComment déployer des travailleurs resque dans la production?

Je l'ai travaille localement, mais je me bats pour le faire fonctionner dans la production. Quelqu'un at-il un:

  1. recette Capistrano à déployer des travailleurs (numéro de contrôle des travailleurs, les redémarrer, etc.)
  2. travailleurs détachés à la machine séparer (s) où l'application principale est en cours d'exécution, quels paramètres ont été nécessaires ici?
  3. obtenu pour survivre à un redémarrage sur le serveur (j'ai essayé de le mettre en cron mais pas de chance)
  4. Comment avez-vous travaillé resque-web (leur excellente application de surveillance) dans votre déploiement?

Merci!

P.S. J'ai posté un problème sur Github à ce sujet mais aucune réponse pour le moment. En espérant que quelques gourous de SO peuvent aider sur ceci parce que je ne suis pas très expérimenté dans les déploiements. Je vous remercie!

+0

Resque est- terrible, utilisez Sidekiq. –

Répondre

4

La réponse de Garrett a vraiment aidé, je voulais juste poster quelques détails de plus. Il m'a fallu beaucoup de bricolage pour bien faire les choses ...

J'utilise aussi le passager, mais nginx au lieu d'apache. D'abord, n'oubliez pas que vous devez installer sinatra, cela m'a jeté un peu de temps. Ensuite, vous devez créer un répertoire pour la chose à exécuter, et il doit y avoir un dossier public et un fichier .mp3. Ils peuvent être vides mais le problème est que git ne sauvegardera pas un répertoire vide dans le repo. Le répertoire doit avoir au moins un fichier, donc j'ai fait des fichiers inutiles comme des espaces réservés.C'est une fonctionnalité/bug bizarre dans git. J'utilise le plugin resque, donc j'ai créé le répertoire là (où est le config.ru par défaut). On dirait que Garrett a créé un nouveau répertoire 'resque' dans sa rails_root. L'un ou l'autre devrait fonctionner. Pour moi ...

cd MY_RAILS_APP/vendor/plugins/resque/ 
mkdir public 
mkdir tmp 
touch public/placeholder.txt 
touch tmp/placeholder.txt 

Je MY_RAILS_APP/vendor/plugins/resque/config.ru modifié de sorte qu'il ressemble à ceci:

#!/usr/bin/env ruby 
require 'logger' 

$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib') 
require 'resque/server' 

use Rack::ShowExceptions 

# Set the AUTH env variable to your basic auth password to protect Resque. 
AUTH_PASSWORD = "ADD_SOME_PASSWORD_HERE" 
if AUTH_PASSWORD 
    Resque::Server.use Rack::Auth::Basic do |username, password| 
    password == AUTH_PASSWORD 
    end 
end 

run Resque::Server.new 

Ne pas oublier de changer ADD_SOME_PASSWORD_HERE au mot de passe que vous souhaitez utiliser pour protéger l'application.

Enfin, j'utilise Nginx Voici donc ce que j'ai ajouté à mon nginx.conf

server { 
    listen 80; 
    server_name resque.seoaholic.com; 
    root /home/admin/public_html/seoaholic/current/vendor/plugins/resque/public; 
    passenger_enabled on; 
} 

Et il se redémarrée sur votre Déploie, probablement quelque chose comme ça dans votre deploy.rb

run "touch #{current_path}/vendor/plugins/resque/tmp/restart.txt" 

Je ne suis pas vraiment sûr si c'est la meilleure façon, je n'ai jamais configuré les applications rack/sinatra avant. Mais ça fonctionne.

Ceci est juste pour lancer l'application de surveillance. Ensuite, j'ai besoin de comprendre la partie de dieu.

+0

Pour suivre et créer un dossier vide pour le déploiement en production, ajoutez simplement un nouveau fichier '.gitkeep' dans ce répertoire et ignorez ce répertoire dans le fichier '.gitignore'.Ensuite, engagez-le. – Autodidact

+0

Vous pouvez désormais monter resque-web en tant qu'application en rack sur un sous-chemin de votre application de production: http://railscasts.com/episodes/271-resque?view=asciicast – m33lky

8

Je viens de comprendre cela hier soir, pour Capistrano vous devriez utiliser san_juan, puis j'aime l'utilisation de God pour gérer le déploiement des travailleurs. Quant à survivre à un redémarrage, je ne suis pas sûr, mais je redémarre tous les 6 mois donc je ne suis pas trop inquiet.

Bien qu'il suggère différentes façons de le démarrer, c'est ce qui a fonctionné le plus facile pour moi. (Au sein de votre deploy.rb)

require 'san_juan' 
after "deploy:symlink", "god:app:reload" 
after "deploy:symlink", "god:app:start" 

Pour gérer où il fonctionne, sur un autre serveur, etc, il couvre que la configuration section du README.

-je utiliser des passagers sur ma tranche, il était relativement facile, je juste besoin d'avoir un fichier config.ru comme ceci:

require 'resque/server' 

run Rack::URLMap.new \ 
    "/" => Resque::Server.new 

Pour mon fichier VirtualHost je:

<VirtualHost *:80> 
     ServerName resque.server.com 
     DocumentRoot /var/www/server.com/current/resque/public 

     <Location /> 
      AuthType Basic 
      AuthName "Resque Workers" 
      AuthUserFile /var/www/server.com/current/resque/.htpasswd 
      Require valid-user 
     </Location> 
</VirtualHost> 

également , une note rapide. Assurez-vous de dépasser la tâche de râteau resque:setup, cela vous fera gagner beaucoup de temps pour engendrer de nouveaux travailleurs avec Dieu.

J'ai rencontré beaucoup de problèmes, donc si vous avez besoin de plus d'aide, il suffit de poster un commentaire.

+0

Des trucs géniaux Garrett, merci pour votre aide! Vous avez raison, c'était vraiment déroutant. J'ai ajouté quelques détails ci-dessous qui ont aidé à ma configuration. –

+0

Garrett, encore un peu confus sur la partie de dieu. Utilisez-vous ceux-ci avec san_juan? http://github.com/defunkt/resque/tree/master/examples/god/ Comment dieu obtient-il le nouveau code du référentiel sur les machines subordonnées lorsque vous le déployez? Mes travailleurs chargent l'environnement. –

+0

En outre, je n'ai pas vraiment compris ce qu'ils voulaient dire par la tâche personnalisée 'resque: setup'. Avez-vous juste fait un comme ça qui le charge avec les paramètres par défaut? http://www.pastie.org/private/bxpevk0g7tfntmvhn6gew Je n'ai pas vraiment compris cela. –

29

Je suis un peu en retard à la fête, mais je pensais que je posterais ce qui a fonctionné pour moi. Essentiellement, j'ai la configuration de Dieu pour surveiller redis et resque. S'ils ne courent plus, Dieu les relance. Ensuite, j'ai une tâche de rake qui s'exécute après un déploiement Capistrano qui quitte mes travailleurs resque. Une fois que les travailleurs sont arrêtés, Dieu va commencer de nouveaux travailleurs afin qu'ils exécutent la dernière base de code.

Voici mon plein writeup de la façon dont je l'utilise resque dans la production:

http://thomasmango.com/2010/05/27/resque-in-production

+0

Merci tsmango! –

+0

Super part. J'ai supprimé le fichier dans mon dossier de configuration et j'ai remplacé le numéro de version de resque trouvé dans 'bundle show resque'. Je vous remercie! –

Questions connexes