2009-11-13 6 views
36

Die GitHub Jungs vor kurzem veröffentlichten ihre Hintergrundverarbeitung App, die Redis verwendet: http://github.com/defunkt/resque http://github.com/blog/542-introducing-resqueWie können Resque Worker in der Produktion bereitgestellt werden?

Ich habe es vor Ort zu arbeiten, aber ich bin zu kämpfen es in der Produktion zu bekommen. Hat jemand ein:

  1. Capistrano Rezept Arbeiter einzusetzen (Kontrollnummer der Arbeitnehmer, sie neu gestartet, usw.)
  2. entsandter Arbeitnehmer Maschine zu trennen (n), von wo aus der Hauptanwendung ausgeführt wird, welche Einstellungen benötigt wurden Hier?
  3. bekommen redis um einen Neustart auf dem Server zu überleben (Ich habe versucht, es in Cron, aber kein Glück)
  4. Wie hast du Resque-Web (ihre ausgezeichnete Monitoring-App) in Ihre Bereitstellung?

Vielen Dank!

P.S. Ich habe ein Problem auf Github veröffentlicht, aber noch keine Antwort. Hoffentlich können einige SO-Gurus hier helfen, da ich in Deployments nicht sehr erfahren bin. Vielen Dank!

+0

Resque ist schrecklich, benutze Sidekiq. –

Antwort

4

Garretts Antwort hat wirklich geholfen, wollte nur ein paar weitere Details posten. Es dauerte eine Menge Basteln, um es richtig zu machen ...

Ich benutze Passagier auch, aber Nginx statt Apache.

Erstens, vergessen Sie nicht, Sie müssen Sinatra installieren, das warf mich für eine Weile.

Dann müssen Sie ein Verzeichnis für die Sache zu laufen, und es muss einen öffentlichen und tmp-Ordner haben. Sie können leer sein, aber das Problem ist, dass git kein leeres Verzeichnis im Repo speichert. Das Verzeichnis muss mindestens eine Datei enthalten, daher habe ich einige Junk-Dateien als Platzhalter erstellt.Dies ist ein seltsames Feature/Bug in Git.

Ich benutze das Resque-Plugin, also habe ich das Verzeichnis dort gemacht (wo der Standard config.ru ist). Es sieht so aus, als hätte Garrett ein neues 'resque'-Verzeichnis in seinem rails_root erstellt. Entweder sollte man arbeiten. Für mich ...

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

Dann bearbeitet ich MY_RAILS_APP/vendor/plugins/resque/config.ru so sieht es so aus:

#!/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 

nicht ADD_SOME_PASSWORD_HERE auf das Passwort Sie die App zu schützen verwenden möchten ändern Vergessen.

Schließlich verwende ich Nginx so hier ist, was ich meine nginx.conf

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

hinzugefügt Und so ist es auf Ihrem entfaltet neu gestartet wird, wahrscheinlich so etwas wie dies in Ihrem deploy.rb

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

Ich bin nicht wirklich sicher, ob dies der beste Weg ist, ich habe nie zuvor Rack/Sinatra-Apps eingerichtet. Aber es funktioniert.

Dies ist nur, um die Überwachung App gehen zu lassen. Als nächstes muss ich den Gottteil herausfinden.

+0

Um einen leeren Ordner für die Bereitstellung auf Produktion zu verfolgen und zu erstellen, fügen Sie einfach eine neue Datei '.gitkeep' in diesem Verzeichnis und Ignoriere dieses Verzeichnis in '.gitignore' Datei.Dann begehe es. – Autodidact

+0

Sie können resque-web jetzt als Rack App auf einem Unterpfad Ihrer Produktions-App mounten: http://railscasts.com/episodes/271-resque?view=asciicast – m33lky

8

Ich habe gerade herausgefunden das letzte Nacht, für Capistrano sollten Sie san_juan verwenden, dann mag ich die Verwendung von God, um den Einsatz von Arbeitnehmern zu verwalten. Um einen Neustart zu überleben, bin ich mir nicht sicher, aber ich starte alle 6 Monate neu, damit ich mir keine Sorgen mache.

Obwohl er verschiedene Wege vorgeschlagen, es zu starten, das ist, was am einfachsten für mich arbeitete. (In Ihrem deploy.rb)

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

zu verwalten, wo es läuft, auf einen anderen Server, etc., deckt er, dass in den configuration section der README.

I Passagier auf meiner Scheibe verwenden, so dass es relativ einfach war, habe ich wie so eine config.ru Datei haben gerade benötigt:

require 'resque/server' 

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

Für meine Virtual Datei ich habe:

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

Auch , eine kurze Notiz. Stellen Sie sicher, dass Sie die Rake-Aufgabe resque:setup übertreiben, es wird Ihnen viel Zeit ersparen, neue Arbeiter mit Gott zu erblühen.

Ich habe eine Menge Ärger bekommen, wenn Sie weitere Hilfe benötigen, schreiben Sie einfach einen Kommentar.

+0

Super Zeug Garrett, danke für deine Hilfe! Du hast Recht, das war wirklich verwirrend. Ich habe unten einige weitere Details hinzugefügt, die mir bei der Einrichtung geholfen haben. –

+0

Garrett, immer noch ein wenig verwirrt auf dem Gott Teil. Benutzt du diese mit san_juan? http://github.com/defunkt/resque/tree/master/examples/god/ Wie erhält man den neuen Code aus dem Repository auf die Arbeitscomputer, wenn Sie ihn bereitstellen? Meine Arbeiter laden die Umwelt. –

+0

Ich habe auch nicht wirklich verstanden, was sie mit der benutzerdefinierten 'resque: setup' Aufgabe meinen. Hast du gerade einen solchen erstellt, der ihn mit den Standardeinstellungen lädt? http://www.pastie.org/private/bxpevk0g7tfntmvhn6gew Ich habe das nicht wirklich verstanden. –

29

Ich bin ein wenig zu spät zur Party, dachte aber, ich würde posten, was für mich funktionierte. Im Wesentlichen habe ich Gott eingerichtet, Redis und Resque zu überwachen. Wenn sie nicht mehr laufen, fängt Gott sie wieder an. Dann habe ich eine Rake-Aufgabe, die ausgeführt wird, nachdem ein Capistrano eingesetzt hat, der meine Resque-Arbeiter beendet. Sobald die Arbeiter gekündigt sind, wird Gott neue Arbeiter aufstellen, damit sie die neueste Codebasis ausführen.

Hier ist meine volle writeup, wie ich resque in der Produktion verwenden:

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

+0

Danke tsmango! –

+0

Großartiger Anteil. Die Datei in meinem Konfigurationsordner abgelegt und die resque-Versionsnummer von "bundle show resque" ersetzt. Vielen Dank! –