2012-01-18 2 views
5

Heroku의 단일 dyno에 Unicorn을 설치 한 경우 3 명의 직원에게 말하십시오. 하위 작업자 중 2 명은 웹 요청을 처리하고 1 명의 Unicorn 하위 작업 (예 : resque 대기열) 또는 예약 된 작업을 수행 할 수 있습니까?하나의 Unicorn 하위 프로세스가 큐를 처리 할 수 ​​있습니까? 나머지는 Heroku 단일 Dyno에서 웹 요청을 처리합니까?

아니면 그냥 적절하지 않습니까?


이제 작동!

그래, 대답을 사용하여 나는 그것을 얻을 수 있었다. 단서를 집어 들기는했지만, 처음에는 조금 어색했다. 이것이 나를 위해 일한 것입니다.

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 

답변

1

그것은 확실히 가능하다 - http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html의 읽기를 취할. 나는 그것을 직접 시도하지 않았지만 곧 나올 것이다. 기본적으로, 당신은 Heroku가 본질적으로 수익을 창출 할 수있는 기회를 잃어버린 것을 의미 이후가 아니라 '적합성'의 완전히 확신

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 

처럼 보이는 unicorn.rb하게 될 겁니다하지만 그들은 어떤을 촬영하지 않은 이 행동을 막기 위해 멈 춥니 다.

+0

그래, 어젯밤 bugsplat 튜토리얼을 통해 작업하고 있었지만 큐를 가져올 수 없었습니다 ... – nverba

+0

각 forked 프로세스가 각각 비슷해야하는지는 알 수 없습니다. 유니콘 마스터. 나는 영웅이 유니콘에 이의가 있다고 생각하지 않는다. 결국 용량이 1 Dyno 밖에 없습니다. 그들은 1 개의 무료 앱에 묶여있는 여러 명의 다이노들로 끝날 수 있기 때문에, 공유 된 DB로 앱을 복제하여 정책을 우회하려고 의도하지 않을 것입니다. – nverba

+0

도 분명히 dyno는 최대 15 개의 스레드를 생성 할 수 있지만 메모리 사용에주의해야합니다. –