2014-07-16 4 views
7

Ich habe Probleme, meine Dynos mehrere verzögerte Job Worker-Prozesse ausführen zu lassen.Wie führen Sie mehrere DelayedJob-Mitarbeiter auf einem einzelnen Heroku-Prüfstand aus?

Mein procfile sieht wie folgt aus:

worker: bundle exec script/delayed_job -n 3 start 

und mein delayed_job Skript ist der Standard von der Perle zu finden:

#!/usr/bin/env ruby 

require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) 
require 'delayed/command' 
Delayed::Command.new(ARGV).daemonize 

Wenn ich versuche, diese entweder lokal zu laufen oder auf einem Heroku dyno es geht still und ich kann nicht sagen, was vor sich geht.

foreman start 
16:09:09 worker.1 | started with pid 75417 
16:09:15 worker.1 | exited with code 0 
16:09:15 system | sending SIGTERM to all processes 
SIGTERM received 

Jede Hilfe mit entweder, wie die Frage oder Vorschläge über andere Möglichkeiten debuggen über das Ausführen mehrerer Arbeiter auf einem einzigen dyno zu gehen wäre es sehr geschätzt.

Antwort

12

Sie Vorarbeiter können mehrere Prozesse auf dem gleichen dyno zu starten.

Fügen Sie zuerst Vorarbeiter zu Ihrer Gemfile hinzu.

Dann fügen Sie eine worker Zeile in procfile:

worker: bundle exec foreman start -f Procfile.workers 

Erstellen Sie eine neue Datei Procfile.workers genannt, die enthält:

dj_worker: bundle exec rake jobs:work 
dj_worker: bundle exec rake jobs:work 
dj_worker: bundle exec rake jobs:work 

Das 3 delayed_job Arbeiter beginnen auf Ihrer Arbeiterprüfstand

0

Kurze Antwort ist, dass Sie dies mit delayed_job nicht tun können. Ein Prüfpunkt ist ein Prozess und ein einzelner delayed_job-Mitarbeiter arbeitet an einem einzelnen Prozess.

Es gibt andere Lösungen zu diesem jedoch. Wenn Sie zur Verwendung von Sidekiq wechseln können, können Sie mehrere Mitarbeiter in einem einzigen Prozess ausführen, da die Sidekiq-Mitarbeiter Threading verwenden. Die Abwägung hier ist, dass Ihre Arbeiter threadsicher sein müssen.

Check it out: http://sidekiq.org/

5

Versuchen Sie procfile an sich ändernde:

worker: bundle exec script/delayed_job -n 3 run

start zwei Daemons erstellen im Hintergrund und dann sofort Ausfahrt benutzen. Heroku denkt, dass dein Prozess abgestürzt ist.

Mit run hält die Arbeiter in den Vordergrund.

UPDATE: Ich verwende jetzt Delayed Job Worker Pool für diese.

+0

Danke für den 'run' Befehl! – dgilperez

+0

Ja, habe ich schon überall gesucht. Dies sollte die akzeptierte Antwort sein. –

Verwandte Themen