Foreman: Konzept: Abhängigkeit

Erstellt am 17. Jan. 2012  ·  3Kommentare  ·  Quelle: ddollar/foreman

Hallo,

Ich habe einen Fork erstellt, um ein Konzept zu testen. Wir verwenden Foreman hauptsächlich in der Entwicklung, um Redis, einen Resque-Worker und einen Resque-Scheduler auszuführen. Diese Worker und Scheduler hängen davon ab, dass Redis gestartet wird, und schlagen in einigen Fällen deswegen fehl.

Die Version unter https://github.com/rvanlieshout/foreman unterstützt die Definition von Abhängigkeiten im Procfile. Im Moment wird nur eine Verzögerung von 5 Sekunden verwendet, damit ein Elternteil loslegen kann. Ein Profil könnte wie folgt aussehen:

mongodb:       mongod --quiet --dbpath=db/mongo/
| redis:       redis-server /opt/local/etc/redis.conf
| | worker:    bundle exec rake environment resque:work QUEUE=* VERBOSE=1 RAILS_ENV=development
| | scheduler: bundle exec rake resque:scheduler QUEUE=* VERBOSE=1 RAILS_ENV=development
post_office:   post_office --smtp 10025 --pop3 10110

(Hinweis: Redis ist hier nicht von Mongo abhängig ... nur zur Demonstration)

Wenn ein "Foreman-Start" ausgeführt wird, startet dieser zuerst Mongo und PostOffice, gefolgt von Redis nach 5 Sekunden und dem Arbeiter und Planer nach 10 Sekunden.

Diese Version von Foreman ist abwärtskompatibel, wirft jedoch einige andere Probleme / Fragen auf:

  • Warum 5 Sekunden warten? Können wir feststellen, wann ein Prozess 'bereit' ist, damit die Abhängigkeiten gestartet werden können?
  • Warten Sie nicht 5 Sekunden, wenn Sie Prozesse stoppen, wenn wir einfach darauf warten könnten, dass die Eltern aufhören
  • Welche Auswirkung hat diese Abhängigkeit beim Export?

Also... Hatten Sie schon einmal Fragen zum Thema Abhängigkeit? Glauben Sie, dass diese Lösung in einer zukünftigen Version von Foreman enthalten sein könnte?

Und... danke für dieses Projekt! Es hilft uns wirklich, unseren Entwicklungsworkflow zu verbessern.

Alle 3 Kommentare

Es gibt keine wirkliche Möglichkeit zu sagen, wann etwas "bereit" ist, außer zu erkennen, ob es an seinen zugewiesenen Port gebunden ist. Nicht alle Prozesse binden an einen Port, und ich würde diese ziemlich komplexe Beziehung lieber nicht in foreman einführen.

Wenn Sie das Gefühl haben, könnten Sie Ihre Prozesse mit einem Skript umschließen, das darauf wartet, dass etwas anderes verfügbar wird, bevor der beabsichtigte Prozess gestartet wird.

Danke schön,
David

Ich würde das lieben :( - Ich habe eine Reihe von RTSPProxy- und RTSPClient-Prozessen und möchte das Starten der Clients verzögern.

Ist es schon umgesetzt?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen