2012-01-18 8 views
5

Se hai un Unicorno impostato su un singolo banco su Heroku, dì con 3 lavoratori. È possibile che 2 dei child worker elaborino richieste Web e 1 figlio Unicorn esegua processi in background, come una coda resque, o attività pianificate?È possibile che un figlio Unicorn elabori una coda, mentre il resto elabora richieste Web su Heroku single Dyno?

Oppure non è appropriato?


Ora funziona!

OK, quindi utilizzando la risposta sotto sono riuscito a farlo prendere la stecca, ma ci è voluto un po 'di armeggiare prima. Questo è ciò che ha funzionato per me.

Procfile

web: bundle exec unicorn_rails -p $PORT -c config/unicorn.rb 

unicorn.rb

worker_processes 2 
preload_app true 
timeout 30 

@resque_pid = nil 

before_fork do |server, worker| 
    @resque_pid ||= spawn("bundle exec rake environment resque:work QUEUE=*") 
end 

after_fork do |server, worker| 
    ActiveRecord::Base.establish_connection 
end 

risposta

1

E 'certamente possibile - prendere una lettura di http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html. Non ci ho provato da solo, ma lo farò presto. In sostanza, ci si ritroverà con un unicorn.rb che assomiglia

worker_processes 3 
timeout 30 

@resque_pid = nil 

before_fork do |server, worker| 
    @resque_pid ||= spawn("bundle exec rake " + \ 
    "resque:work QUEUES=scrape,geocode,distance,mailer") 
end 

io non sono del tutto sicuro del 'adeguatezza' perché significa Heroku è essenzialmente perdendo su entrate, ma non hanno preso alcun si ferma per bloccare questo comportamento (né penso che lo farebbero).

+0

Sì, stavo lavorando attraverso il tutorial di bugsplat la scorsa notte, ma non sono riuscito a ottenere la coda ... – nverba

+0

Per quanto appropriato, non ero sicuro che ogni processo biforcato avrebbe dovuto essere uguale per ogni maestro unicorno. Non penso che lei abbia alcuna obiezione all'unicorno, lo fanno riferimento più volte nella sua documentazione. Dopotutto, solo 1 Dyno è in grado di funzionare. È più probabile che si oppongano a deliberare la clonazione di app con DB condiviso per eludere le loro policy, in quanto si potrebbe finire con l'aggiunta di diversi dynos per 1 app gratuita. – nverba

+0

anche apparentemente un dyno può generare fino a 15 thread - ma è necessario fare attenzione all'utilizzo della memoria. –

Problemi correlati