2012-03-26 149 views
5

我的環境是rails 3.1,heroku bamboo stack,delayed_job_active_record,(https://github.com/collectiveidea/delayed_job)並試用了hirefire。 (https://github.com/meskyanichi/hirefire) - 我可以看到delayed_job隊列文檔,但我如何將這個應用於heroku?如何將工作人員分成延遲工作+ heroku工作池?

我有一組最高優先級的任務,每隔一小時產生一次,我需要專門爲3名工作人員工作,大約需要26分鐘才能完成。在此期間,不太重要的背景任務需要繼續,可能有1名工作人員專門負責這些任務。

因此,我將設置該優先級任務塊爲一個命名隊列,例如, 'hourtask',然後命名隊列中的其他所有'everythingelse':)

問題是,我該如何將heroku工作者分配給特定隊列?根據文檔,這與環境變量有關嗎?它說:

# 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 

但我不熟悉heroku安裝程序來解決如何將這個應用到我的heroku生產環境?

回答

14

它在自述中要延遲作業3:

DJ 3引入了一個名爲隊列,同時仍保留DJ風格的優先Resque風格。目標是提供一個系統,將不同的工作人員組合起來分配任務,這些人員可以單獨調整和控制。

作業可以通過設置隊列選項被分配到一個隊列:

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

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

handle_asynchronously :tweet_later, :queue => 'tweets' 

腳本/ delayed_job的可以用來管理一個後臺進程將開始工作過的工作。

爲此,請將gem「daemons」添加到您的Gemfile中,並確保您已運行rails generate delayed_job。通過設置一個或多個隊列環境變量

$ 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 

工作過隊列:

您可以然後執行以下操作。

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

在Heroku上,在你的procfile,創建兩個條目:

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

並單獨縮放它們:問HireFire以及

heroku ps:scale worker1=2 worker2=1 

+0

我的問題是,如果我擴展到heroku上的4名工作人員,我如何設置其中的3個來執行關閉的命名隊列a,並且其中的1個專門處理命名的隊列b。 – Dave 2012-03-26 16:51:57

+0

已更新的答案。 – 2012-03-26 16:58:25

+0

「Procfile和進程管理命令(heroku run和heroku scale)僅在Cedar堆棧上可用。」 - 我在Bamboo上,不知道如何配置,但不能使用procfile我不覺得? HTTP://devcenter.heroku。com/articles/procfile – Dave 2012-03-26 17:15:50

1

原來的問題。此時HireFire不支持命名隊列(see HireFire website),這使得自動縮放比較困難。

+0

作爲更新,HireFire _does_現在支持命名隊列。我是一個快樂的HireFire客戶。 HireFire howto here:http://hirefire.io/documentation/guides/rails-3-integration – 2013-10-12 07:05:41