2012-01-18 13 views
5

Nếu bạn đã thiết lập Unicorn trên một dyno đơn trên Heroku, hãy nói với 3 công nhân. Có thể có 2 trong số các nhân viên trẻ xử lý yêu cầu web và 1 đứa trẻ Unicorn làm công việc trong nền, chẳng hạn như hàng đợi khôi phục hoặc công việc đã lên lịch?Có thể có một quá trình con Unicorn một hàng đợi, trong khi phần còn lại xử lý yêu cầu web trên Heroku Dyno đơn?

Hoặc điều đó không thích hợp?


Hiện đã hoạt động!

OK, do đó, sử dụng câu trả lời dưới đây tôi đã cố gắng làm cho nó nhận tín hiệu, nhưng trước tiên phải mất một chút tinkering. Đây là những gì làm việc cho tôi.

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 

Trả lời

1

Nó chắc chắn là có thể - hãy đọc của http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html. Tôi đã không cố gắng nó bản thân mình mặc dù nhưng tôi sẽ sớm. Về cơ bản, bạn sẽ kết thúc với một unicorn.rb trông giống như

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 

Tôi không hoàn toàn chắc chắn về 'phù hợp' vì nó có nghĩa là Heroku về cơ bản được mất ra trên doanh thu nhưng họ đã không thực hiện bất kỳ dừng lại để chặn hành vi này (tôi cũng không nghĩ là chúng).

+0

Yea, tôi đã làm việc qua hướng dẫn về bugsplat đêm qua, nhưng không thể lấy hàng đợi ... – nverba

+0

Để thích hợp, tôi không chắc liệu mỗi quy trình chia sẽ có giống nhau hay không kỳ lân. Tôi không nghĩ rằng Heroku có bất kỳ phản đối nào về kỳ lân, họ nhắc đến nó nhiều lần trong tài liệu của họ. Nó chỉ có 1 Dyno chạy hết công suất. Họ có nhiều khả năng phản đối việc nhân bản các ứng dụng có chủ ý với DB được chia sẻ để phá vỡ chính sách của họ, vì bạn có thể kết thúc với một số dynos bị ràng buộc cho 1 ứng dụng miễn phí. – nverba

+0

cũng dường như một dyno có thể sinh ra tối đa 15 luồng - nhưng bạn cần phải cẩn thận khi sử dụng bộ nhớ. –