2012-03-26 10 views
5

Ortamım 3.1, heroku bambu yığını, delayed_job_active_record, (https://github.com/collectiveidea/delayed_job) ve hirefire ile deneme yapmaktır. (https://github.com/meskyanichi/hirefire) - delayed_job kuyruğu belgelerini görebiliyorum, ancak bunu nasıl bir kahramana uygulayabilirim?İşçileri, gecikmiş iş + heroku ile iş havuzlarına nasıl ayırırım?

3 işçiye ayrılmam gereken her saatte ortaya çıkacak maksimum öncelikli görevlerim var, tamamlanması yaklaşık 26 dakika sürüyor. Bu süre zarfında, belki de kendilerine adanmış bir işçi ile daha az önemli olan arka plan görevleri devam etmelidir.

Bu nedenle, öncelikli görev bloğunu, adlandırılmış bir sırada olmak üzere, ör. 'hourtask' ve sonra 'her şey için başka bir şey' için bir kuyruğu adlandırın :)

Soru şu ki, nasıl kahramanca işçileri belirli sıralara ayırabilirim? Belgelere göre çevre değişkenleri ile ilgisi var mı?

# 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 

Ama benim Heroku üretim ortamına bu nasıl uygulanacağı çalışmak Heroku kurulumu ile yeterince aşina değilim: Alo?

cevap

14

Bu Gecikmeli İşi 3 README var:

DJ 3 hâlâ DJ tarzı önceliği koruyarak sıraları adlı Resque tarzı tanıtır. Amaç bireysel olarak ölçeklendirilebilen ve kontrol edilebilen ayrı iş havuzları tarafından çalışılacak görevleri gruplandırmak için bir sistem sağlamaktır.

İşler kuyruğu seçeneği ayarlayarak bir sıraya atanabilir:

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

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

handle_asynchronously :tweet_later, :queue => 'tweets' 

komut/delayed_job iş bırakmayı çalışmaya başlayacak bir arka plan işlemini yönetmek için kullanılabilir.

Bunu yapmak için Gemfile'a gem "daemons" ekleyin ve rails generate delayed_job'u çalıştırdığınızdan emin olun.

Daha sonra aşağıdakileri yapabilirsiniz:

$ 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 

Work kapalı sıraları KUYRUK veya KUYRUKLARI ortam değişkenini ayarlayarak.

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

ve bunları tek tek ölçek:

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

Heroku günü, senin procfile olarak, iki giriş oluşturmanın yanı HireFire sorulduğunda

heroku ps:scale worker1=2 worker2=1 

vb

+0

Sorum, heroku üzerinde 4 işçiye ölçeklendirirsem, bunlardan 3 tanesini adlandırılmış sıra a yürütme işlemini, 1 adedinin ise yalnızca sıralı sıra b dışında çalışmasını nasıl ayarlayabilirim. – Dave

+0

güncellendi yanıt. –

+0

"Procfile ve süreç yönetimi komutları (heroku run ve heroku ölçeği) yalnızca Cedar yığınında kullanılabilir." - Bambu'dayım, nasıl yapılandırılacağından emin değilim, ama düşünemediğim procfile'ı kullanamıyorum. http: //devcenter.heroku.com/articles/procfile – Dave

1

Orijinal soru. Şu anda HireFire, otomatik ölçeklemeyi zorlaştıran sıralı kuyrukları (see HireFire website) desteklemez.

+0

Güncelleme olarak, HireFire _does_ şimdi adlandırılmış sıraları desteklemektedir. Ben mutlu bir HireFire müşterisiyim. HireFire nasıl yapılır: http://hirefire.io/documentation/guides/rails-3-integration –