2013-08-11 31 views
5

Cho rằng kỳ lân thường quản lý nhiều hơn một quy trình máy chủ Rails, và cho rằng một công việc Resque có thể tiêu thụ ít tài nguyên hơn yêu cầu Web, nên có thể chạy nhiều hơn một nhân viên phục hồi trên một doku đơn Heroku.Có ai chạy nhiều hơn một nhân viên phục hồi trong Heroku Dyno không?

Có ai làm điều này thành công cho đến nay không? Suy nghĩ của tôi là, một cách dễ dàng để làm như vậy sẽ có Procfile chạy đốc, sau đó chạy 2 (hoặc nhiều hơn) trường hợp của nhân viên thực tế (ví dụ: rake resque:work)

Hoặc là rake resque:workers tối đa nhiệm vụ đó? Resque chính nó không khuyên bạn nên sử dụng phương pháp đó, vì điều này bắt đầu công nhân trong các chủ đề song song thay vì trong quá trình song song.

Rõ ràng, điều này chỉ có ý nghĩa đối với các công việc liên kết i/o.

Trả lời

8

Người ta có thể sử dụng quản đốc để bắt đầu nhiều quy trình. Thêm đốc để Gemfile của bạn, và sau đó tạo ra hai tập tin:

Procfile:

worker: bundle exec foreman start -f Procfile.workers 

Procfile.workers:

worker_1: QUEUE=* bundle exec rake resque:work 
worker_2: QUEUE=* bundle exec rake resque:work 

Kỹ thuật tương tự có thể được sử dụng để chạy một trang web máy chủ cùng với một số công nhân.

LƯU Ý: trong khi nhiều thành công của tiểu bang sử dụng phương pháp này, tôi sẽ không đề nghị sử dụng nó bên ngoài một số thử nghiệm, chủ yếu là do rủi ro chạy vào giới hạn RAM trên các trường hợp nhỏ của heroku; và một khi bạn trả tiền cho dịch vụ heroku thì có lẽ dễ dàng hơn khi chỉ quay lên một máy công nhân chuyên dụng.

+0

Tuyệt vời! Tôi chỉ sử dụng kỹ thuật này để quay lên [nhiều tiến trình delay_job trên một công nhân đơn lẻ] (http://stackoverflow.com/a/21568770/165673) – Yarin

+0

Heroku có theo dõi các quá trình được bắt đầu bởi tệp 'Procfile.workers' không? Đó là vấn đề cốt lõi khi không sử dụng cài đặt 'COUNT = 2' của resque. – ajsharma

+0

Tôi cho rằng nếu một trong số những người lao động chết thì người quản đốc đang chạy "Procfile.workers" sẽ giết tất cả các con của nó và chấm dứt chính nó - và điều này sau đó sẽ trở thành hiển thị đối với heroku. Tôi đã chạy các thiết lập trên trong một thời gian mà không có vấn đề, mà không có vấn đề, nhưng tại một số điểm quyết định chỉ đi với mặc định của Heroku. – radiospiel

1

Dựa trên this article, có vẻ như nó có thể, nhưng lưu ý lớn nhất là nếu một trong các tiến trình con chết, Heroku sẽ không thể khởi động lại nó.

+0

Cảm ơn nỗ lực của bạn. Tôi đã tìm thấy một cách dễ dàng hơn để xây dựng và có thể ổn định hơn - xem ở trên – radiospiel

Các vấn đề liên quan