2016-05-23 15 views
0

Ich versuche Sidekiq auf Bluemix zu verwenden. Ich denke, dass ich auf dem richtigen Weg bin, aber es funktioniert nicht vollständig.Wie sidekiq auf Bluemix verwenden

Ich habe eine App mit Sinatra, die Sidekiq-Jobs verwendet, um viele Aktionen zu machen. Ich habe die folgende Zeile in meiner manifest.yml Datei:

command: bundle exec rackup config.ru -p $PORT && bundle exec sidekiq -r ./server.rb -c 3

Ich dachte, dass mit diesem Befehl sidekiq laufen, aber wenn ich den Endpunkt aufrufen, die einen Job erstellt, es ist immer noch auf der „Queue“ auf das Sidekiq-Panel.

Welche Maßnahmen muss ich ergreifen, um sidekiq zur Bearbeitung des Jobs zu veranlassen?

PS: Ich bin Anfänger auf Bluemix. Ich versuche meine App von Heroku nach Bluemix zu migrieren.

Antwort

0

einfache Antwort auf diese Frage „wie er fragt“:

Ihr Start-up-Befehl wertet nicht einen zweiten Teil, der eine nach ‚& &‘. Wenn Sie versuchen, das in Ihrer lokalen Umgebung zu starten, ist das Ergebnis dasselbe. Der Server wird gestartet und die Konsole wird einfach die Server-Logs nach unten ziehen, ohne sie technisch zu bewerten, bis sie ein Kill-Signal senden (so dass der Teil nach '& &' niemals zur selben Zeit läuft).

Subbing, dass mit nur '&' Art-of-Kinda behebt das, da beide zur gleichen Zeit ausgeführt werden.

Befehl: bundle exec rackup config.ru -p $ PORT & Bündel exec sidekiq

Was ist mit dieser Lösung nicht ideal ist? Äh, wahrscheinlich eine Menge Zeug. Der größte Täter jedoch: zwei Prozesse gleichzeitig aktiv zu haben, nur einer von ihnen erwartet und beobachtet (der zweite).

Senden von '(bluemix) cf stop' an die durch das Manifest mit diesem Befehl erstellte Anwendungsinstanz stoppt nur die beobachtete Instanz vor der Außerbetriebnahme der Instanz - in diesem Fall können wir nicht sicher sein, dass der erste Prozess externe Ressourcen freigegeben hat Senden von Benachrichtigungen oder Schließen der Verbindungen oder was auch immer.


Was Sie wahrscheinlich stattdessen in Erwägung ziehen könnte: ein

1. Point. Bluemix ist eine CF-Implementierung, und mit einer schnellen Manifest.yml-Implementierung gibt es nichts, was Sie davon abhält, den Anwendungsserver und die sidekiq-Worker auf separaten Instanzen auszuführen.

2. Bessere Schale.

Befehl: sh -c 'COMMAND1 & command2 & wait'

** 3. TBD, wahrscheinlich eine Menge Optionen, aber ich bin auch ein Anfänger.**

0

separate App-Instanzen auf CloudFoundry für Ihre Rack-basierte Anwendung und Ihre Mitarbeiter wäre besser, da kann man dann:

  • Maßstab web/Arbeiter unabhängig (? Mehr Verkehr skalieren einfach die Web-Anwendung)
  • Deploy jede Komponente unabhängig, wenn
  • sicher jeden Prozess ist gesundheits geprüft

der Nachteil & mit Make benötigt Join Befehle, wie in der anderen Antwort vorgeschlagen, ist, dass der erste Prozess im Hintergrund gestartet wird. Dies bedeutet, dass Sie keine zuverlässige Überwachung und automatische Neustarts haben werden, wenn der erste Prozess abstürzt.

Es gibt ein etwas veraltetes Beispiel auf der CloudFoundry-Website, das demos using two application manifests (eins für Web, eins für Arbeiter), um jedes Teil unabhängig bereitzustellen.