2012-03-26 5 views
5

Meine Umgebung ist Rails 3.1, Heroku Bambus-Stack, delayed_job_active_record, (https://github.com/collectiveidea/delayed_job) und experimentieren mit Mietfeuer. (https://github.com/messkyanichi/hirefire) - Ich kann die delayed_job Warteschlangendokumentation sehen, aber wie kann ich dies auf heroku anwenden?Wie kann ich Arbeiter in Jobs mit verzögerter Job + Heroku trennen?

Ich habe eine Reihe von Aufgaben mit maximaler Priorität, die jede Stunde, die ich 3 Arbeitern widmen muss, erstellt werden, dauert ca. 26 Minuten. Während dieser Zeit müssen weniger wichtige Hintergrundaufgaben fortgesetzt werden, mit vielleicht einem Arbeiter, der ihnen gewidmet ist.

Also werde ich diesen Block von Priorität Aufgaben in einer benannten Warteschlange, z. 'hourtask', und dann eine Warteschlange für alles andere 'everythingse' nennen :)

Die Frage ist, wie widme ich Heroku Arbeiter zu bestimmten Warteschlangen? Hat es etwas mit den Umgebungsvariablen gemäß der Dokumentation zu tun? Dort heißt es:

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

Aber ich bin nicht genug, um mit Heroku Setup vertraut zu erarbeiten, wie diese Umgebung meiner Heroku Produktion bewerben?

Antwort

14

Es ist in der Readme für Delayed Job 3:

DJ 3 führt Resque-Stil Warteschlangen genannt, während noch im DJ-Stil Priorität behalten. Das Ziel besteht darin, ein System zur Gruppierung von Aufgaben zu schaffen, die von verschiedenen Arbeiternetzwerken zu bearbeiten sind, die individuell skaliert und gesteuert werden können.

Jobs können durch Einstellen der Warteschlange Option in eine Warteschlange zugewiesen werden:

object.delay(:queue => 'tracking').method 

Delayed::Job.enqueue job, :queue => 'tracking' 

handle_asynchronously :tweet_later, :queue => 'tweets' 

/script delayed_job kann verwendet werden, um einen Hintergrundprozess zu verwalten, die Arbeitsplätze Abarbeiten beginnt.

Fügen Sie dazu gem "Daemons" zu Ihrer Gemdatei hinzu und stellen Sie sicher, dass Sie rails generate delayed_job ausgeführt haben.

können Sie dann wie folgt vor:

$ RAILS_ENV=production script/delayed_job start 
$ RAILS_ENV=production script/delayed_job stop 

# Runs two workers in separate processes. 
$ RAILS_ENV=production script/delayed_job -n 2 start 
$ RAILS_ENV=production script/delayed_job stop 

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

nachbearbeiten aus Warteschlangen durch den QUEUE oder QUEUES Umgebungsvariable.

QUEUE=tracking rake jobs:work 
QUEUES=mailers,tasks rake jobs:work 

Auf Heroku, in Ihrem procfile, erstellen Sie zwei Einträge:

worker1: QUEUE=tracking rake jobs:work 
worker2: QUEUES=mailers,tasks rake jobs:work 

und skaliert sie einzeln:

heroku ps:scale worker1=2 worker2=1 

etc

+0

Meine Frage ist, wenn ich auf Heroku auf 4 Arbeiter skalieren, wie setze ich 3 von ihnen, um named Warteschlange a auszuführen, und 1 von ihnen, um named queue b ausschließlich zu arbeiten. – Dave

+0

aktualisierte Antwort. –

+0

"Procfile und die Prozessmanagementbefehle (heroku run und heroku scale) sind nur auf dem Cedar Stack verfügbar." - Ich bin auf Bambus, nicht sicher, wie zu konfigurieren, kann aber nicht procfile ich glaube nicht? http: //devcenter.heroku.com/articles/procfile – Dave

1

Original Frage zu HireFire fragte auch. Zu diesem Zeitpunkt unterstützt HireFire keine benannten Warteschlangen (see HireFire website), was die automatische Skalierung erschwert.

+0

Als Update unterstützt HireFire _does_ jetzt benannte Warteschlangen. Ich bin ein glücklicher Kunde von HireFire. HireFire howto hier: http://hirefire.io/documentation/guides/rails-3-integration –

Verwandte Themen