2012-03-26 37 views
5

Môi trường của tôi là đường ray 3.1, chồng tre heroku, delay_job_active_record, (https://github.com/collectiveidea/delayed_job) và thử nghiệm với thuê lửa. (https://github.com/meskyanichi/hirefire) - Tôi có thể xem tài liệu hàng đợi delay_job, nhưng làm cách nào để áp dụng điều này trên heroku?Làm cách nào để tách công nhân thành các nhóm công việc có công việc bị trì hoãn + heroku?

Tôi có một tập hợp các tác vụ ưu tiên tối đa được tạo ra mỗi giờ mà tôi cần dành 3 công nhân, phải mất khoảng 26 phút để hoàn thành. Trong thời gian đó, các nhiệm vụ nền quan trọng ít cần phải tiếp tục, có lẽ 1 nhân viên dành riêng cho họ.

Vì vậy, tôi sẽ đặt khối nhiệm vụ ưu tiên đó thành hàng đợi có tên, ví dụ: 'hourtask', và sau đó đặt tên hàng đợi cho mọi thứ khác 'mọi thứ' :)

Câu hỏi đặt ra là, làm thế nào để tôi dành công nhân cho các công nhân của mình cho hàng đợi cụ thể? Có liên quan gì đến các biến môi trường theo tài liệu không? Nó nói:

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

Nhưng tôi không quen với việc thiết lập heroku để tìm cách áp dụng điều này cho môi trường sản xuất heroku của tôi?

Trả lời

14

Đó là trong README cho hoãn Job 3:

DJ 3 giới thiệu Resque kiểu đặt tên hàng đợi trong khi vẫn duy trì ưu tiên DJ-phong cách. Mục tiêu là cung cấp một hệ thống để nhóm các nhiệm vụ được làm việc bởi các nhóm công nhân riêng biệt, có thể được thu nhỏ và kiểm soát riêng lẻ.

Jobs có thể được gán cho một hàng đợi bằng cách thiết lập các tùy chọn đợi:

object.delay(:queue => 'tracking').method 

Delayed::Job.enqueue job, :queue => 'tracking' 

handle_asynchronously :tweet_later, :queue => 'tweets' 

script/delayed_job thể được sử dụng để quản lý một tiến trình nền mà sẽ bắt đầu làm việc ra công ăn việc làm.

Để làm như vậy, hãy thêm đá quý "daemon" vào Gemfile của bạn và đảm bảo bạn đã chạy rails generate delayed_job.

Sau đó bạn có thể làm như sau:

$ RAILS_ENV=production script/delayed_job start 
$ RAILS_ENV=production script/delayed_job stop 

# Runs two workers in separate processes. 
$ RAILS_ENV=production script/delayed_job -n 2 start 
$ RAILS_ENV=production script/delayed_job stop 

# Set the --queue or --queues option to work from a particular queue. 
$ RAILS_ENV=production script/delayed_job --queue=tracking start 
$ RAILS_ENV=production script/delayed_job --queues=mailers,tasks start 

làm việc ra khỏi hàng đợi bằng cách thiết lập HÀNG ĐỢI hoặc hàng đợi biến môi trường.

QUEUE=tracking rake jobs:work 
QUEUES=mailers,tasks rake jobs:work 

On Heroku, Trong procfile của bạn, tạo ra hai mục:

worker1: QUEUE=tracking rake jobs:work 
worker2: QUEUES=mailers,tasks rake jobs:work 

và quy mô cho họ cách riêng lẻ:

heroku ps:scale worker1=2 worker2=1 

vv

+0

Câu hỏi của tôi là nếu tôi chia tỷ lệ thành 4 công nhân trên heroku, làm cách nào để đặt 3 người trong số họ thực thi hàng đợi có tên a và 1 trong số họ làm việc với hàng đợi có tên b, độc quyền. – Dave

+0

câu trả lời được cập nhật. –

+0

"Procfile và các lệnh quản lý quy trình (quy trình heroku và quy mô heroku) chỉ có sẵn trên ngăn xếp Cedar." - Tôi đang trên Bamboo, không chắc chắn làm thế nào để cấu hình, nhưng không thể sử dụng procfile tôi không nghĩ? http: //devcenter.heroku.com/articles/procfile – Dave

1

gốc câu hỏi được hỏi về HireFire là tốt. Tại thời điểm này, RentalFire không hỗ trợ hàng đợi có tên (see HireFire website) khiến việc tự động mở rộng quy mô trở nên khó khăn.

+0

Là bản cập nhật, HireFire _does_ hiện hỗ trợ hàng đợi có tên. Tôi là một khách hàng của RentFire hạnh phúc. ThuêFire tại đây: http://hirefire.io/documentation/guides/rails-3-integration –

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