2012-03-26 10 views
5

Il mio ambiente è rotaie 3.1, Heroku pila di bambù, delayed_job_active_record, (https://github.com/collectiveidea/delayed_job) e sperimentando hirefire. (Https://github.com/meskyanichi/hirefire) - posso vedere la documentazione di coda di delayed_job, ma come faccio a applicare questo su Heroku?Come si separano i lavoratori in pool di lavori con lavoro ritardato + heroku?

Ho una serie di priorità massima di compiti che vengono fuori hanno deposto le uova ogni ora che ho bisogno di dedicare 3 lavoratori a, ci vogliono circa 26 minuti per completare. Durante quel periodo, le attività di background meno importanti devono continuare, con forse un operatore dedicato a loro.

Quindi mi misi quel blocco di compiti prioritari di essere in una coda di nome, per esempio 'hourtask', quindi denominare una coda per tutto il resto 'everythingelse' :)

La domanda è: come posso dedicare i lavoratori heroku a specifiche code? Ha qualcosa a che fare con le variabili di ambiente come da documentazione? Dice:

# 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 

Ma io non sono abbastanza familiarità con l'installazione Heroku per capire come applicare questo al mio ambiente di produzione Heroku?

risposta

14

E 'nel README per ritardata Job 3:

DJ 3 introduce Resque-stile denominato code pur mantenendo la priorità in stile DJ. L'obiettivo è fornire un sistema per raggruppare le attività che devono essere elaborate da pool separati di lavoratori, che possono essere ridimensionati e controllati individualmente.

I lavori possono essere assegnati a una coda impostando l'opzione coda:

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

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

handle_asynchronously :tweet_later, :queue => 'tweets' 

script/delayed_job può essere utilizzato per gestire un processo in background che inizierà a lavorare fuori di posti di lavoro.

Per fare ciò, aggiungi gememoni "demoni" al tuo Gemfile e assicurati di aver eseguito rails generate delayed_job.

È possibile effettuare le seguenti operazioni:

$ 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 

lavoro fuori le code impostando la variabile d'ambiente coda o code.

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

Su Heroku, Nella tua procfile, creare due voci:

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

e scalare singolarmente:

heroku ps:scale worker1=2 worker2=1 

ecc

+0

La mia domanda è se io ridimensiono a 4 lavoratori su heroku, come faccio a impostarne 3 per eseguire fuori la coda denominata a, e 1 di essi per eliminare la coda di nome b, esclusivamente. – Dave

+0

risposta aggiornata. –

+0

"i comandi di gestione processo Procfile e (heroku gestito e heroku scala) sono disponibili solo in pila cedro." - Sono su Bamboo, non so come configurare, ma non posso usare procfile Non penso? http: //devcenter.heroku.it/articles/procfile – Dave

1

domanda originale chiesto HireFire pure. In questo momento HireFire non supporta denominate code (see HireFire website) che fa auto-scaling difficile.

+0

Come aggiornamento, HireFire _does_ ora supporta le code denominate. Sono un cliente di HireFire felice. HireFire howto qui: http://hirefire.io/documentation/guides/rails-3-integration –

Problemi correlati