9

Ich habe gerade angefangen, AWS Elastic Beanstalk mit meiner Rails App zu verwenden, und ich muss die Resque Edelstein für Hintergrundjobs verwenden. Trotz aller Bemühungen, Resque Worker auf Elastic Beanstalk auszuführen, konnte ich nicht herausfinden, wie?Wie kann ich Rails-Hintergrundjobs auf AWS Elastic Beanstalk ausführen?

How can I run Rails background jobs with Resque on AWS Elastic Beanstalk? spricht davon, diese als Dienste in Elastic Beanstalk-Containern auszuführen, jedoch ist es immer noch sehr verwirrend.

Hier meine ebextentions resque.config Datei:

services: 
    sysvinit: 
    resque_worker: 
    enabled: true 
    ensureRunning: true 
    commands: 
     resque_starter: 
     rake resque:work QUEUE='*' 

EDIT nun wie folgt meine resque.config Datei aussieht:

container_commands: 
    resque_starter: "rake resque:work QUEUE='*'" 
services: 
    sysvinit: 
    resque_worker: 
     enabled: true 
     ensureRunning: true 
     commands: 
     resque_starter 

Und es ist immer noch nicht funktioniert. 2 EDIT

container_commands: 
    resque_starter: 
    command: "rake resque:work QUEUE=sqs_message_sender_queue" 
    cwd: /var/app/current/ 
    ignoreErrors: true 

Noch zeigt es 0 Arbeiter.

+0

Was verwirrt Sie? –

+0

Ich würde empfehlen, container_commands anstelle von Befehlen zu verwenden. –

+0

Was verwirrt mich ist, wie "Rake resque: Arbeit QUEUE = '*'" Befehl automatisch nach jeder Bereitstellung ausführen, wenn es lebendig ist töten und erneut ausführen? Ich hoffe, es ist spezifischer –

Antwort

4

Zuerst überhaupt, würde ich empfehlen resque mit Hilfe von supervisord zu laufen diese Sie sicherstellen, wird dazu beitragen, dass Arbeitnehmer, wenn Prozessform neu gestartet werden.

Auf wie Befehl ausgeführt werden soll, wenn Sie jedes Mal tun bereitstellen: Einloggen per SSH auf Ihren Bohnenstengel Instanz Ordner gehen:/opt/elasticbeanstalk/hooks/AppDeploy/ Hier können Sie die Liste Haken finden, die jedes Mal ausführen wenn Sie bereitstellen. Auch hier können Sie ein eigenes Skript erstellen, das jedes Mal ausgeführt wird, wenn Sie es bereitstellen. Mit demselben Ansatz können Sie auch das Skript an Hooks setzen, die für den Neustart des Anwendungsservers verantwortlich sind und die Möglichkeit haben, Ihren Hintergrundjob ohne Verbindung von ssh neu zu starten.

Eine weitere Option, setzen Sie Ihren Befehl, die Verwendung container_commands Hintergrund Arbeiter statt Befehle starten.

Schauen Sie sich auch die besten Artikel an, die ich über die Anpassung von Bohnenstangen gefunden habe: http://www.hudku.com/blog/tag/elastic-beanstalk/ Es wäre ein guter Startpunkt für die Anpassung der Beanstalk-Umgebung für Ihre Bedürfnisse. \

+0

Ich frage mich, ob Sie die Verwendung von container_commands näher erläutern könnten? Die Dokumente geben an, dass sie ausgeführt werden, bevor die Anwendungsversion bereitgestellt wird. Wenn dies der Fall ist, sehe ich nicht, wie sie nützlich wären. – dangerousdave

+0

Nun, Befehle nützlich, wenn Sie einige Aktion ausführen müssen, bevor Anwendung extrahiert wird, in diesem Moment der Webserver ausgeführt wird. Ab dem Zeitpunkt werden sie einmal auf neuen Server ausgeführt. container_commands - wenn die Anwendung extrahiert wird, aber bevor die Anwendung bereitgestellt wird. –

6

Ich denke, es ist suboptimal, Warteschlangen, wie Resque, in Elastic Beanstalk-Webumgebungen auszuführen. Eine Web-Umgebung soll Web-Anwendungen hosten und neue Instanzen erzeugen, wenn der Verkehr und die Belastung zunehmen. Es wäre jedoch nicht sinnvoll, mehrere Resque-Warteschlangen zu haben, die jeweils auf einer der Instanzen ausgeführt werden.

Elastic Beanstalk bietet worker environments, die dazu bestimmt sind, den Code zu hosten, die Hintergrundaufgaben ausführt. Diese Workerumgebungen ziehen Jobs von einem Amazon SQS queue (wodurch eine zusätzliche Warteschlangenlösung wie Resque überflüssig wird). Eine Amazon SQS-Warteschlange lässt sich problemlos skalieren und ist einfacher zu verwalten (AWS tut dies nur für Sie).

Um Arbeiter Umgebungen, die kommen mit Amazon SQS-Warteschlangen zu verwenden, macht mehr Sinn, als es aus der Box unterstützt und passt gut in die Elastic Beanstalk Landschaft. Es gibt auch ein Schmuckstück, Active Elastic Job, das es Rails> = 4.2-Anwendungen erleichtert, Hintergrundaufgaben in Arbeitsumgebungen auszuführen.

Disclaimer: Ich bin der Autor Active Elastic Job.

+2

Arbeitsumgebungen erscheinen wie verrückter Overkill, wenn Sie nur kleine periodische Aufgaben auf jedem Server ausführen möchten. –