2012-01-18 17 views
5

Jeśli masz Unicorn ustawiony na jednym dyno na Heroku, powiedz z 3 pracownikami. Czy 2 osoby pracujące z dziećmi mogą przetwarzać żądania internetowe, a 1 dziecko jednorożca wykonuje zadania w tle, takie jak kolejka resque lub zaplanowane zadania?Czy jest możliwe, aby jedno dziecko Unicorn przetworzyło kolejkę, podczas gdy pozostałe przetwarzają żądania sieciowe na pojedynczym strumieniu Heroku?

Czy to nie jest właściwe?


Teraz to działa!

OK, więc używając odpowiedzi poniżej udało mi się ją odebrać, ale najpierw trzeba było odrobinę majsterkować. To właśnie dla mnie zadziałało.

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 

Odpowiedz

1

To na pewno jest to możliwe - warto poczytać o http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html. Sam tego nie próbowałem, ale wkrótce będę. Zasadniczo, będziesz skończyć z unicorn.rb który wygląda jak

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 

Nie jestem do końca pewien z „stosowność”, ponieważ oznacza to, Heroku zasadniczo tracąc na dochody, ale nie miały jakikolwiek przestaje blokować to zachowanie (nie sądzę, że oni).

+0

Tak, pracowałem przez samouczek dotyczący bugsplata zeszłej nocy, ale nie mogłem go odebrać w kolejce ... – nverba

+0

Co do odpowiedniego, po prostu nie byłem pewien, czy każdy rozwidlony proces musiałby być podobny dla każdego mistrz jednorożca. Nie sądzę, że heroku ma jakiekolwiek zastrzeżenia do jednorożca, odnoszą się do niego kilkakrotnie w swojej dokumentacji. W końcu to tylko 1 Dyno. Z większym prawdopodobieństwem sprzeciwi się celowemu klonowaniu aplikacji za pomocą współdzielonej bazy danych, aby obejść ich zasady, ponieważ może się zdarzyć, że kilka dynamów zostanie przywiązanych do 1 bezpłatnej aplikacji. – nverba

+0

również widocznie dyno może odradzać się do 15 wątków - ale musisz uważać na użycie pamięci. –