2013-02-27 113 views
0

通過rails中的delayed_jobs gem(https://github.com/collectiveidea/delayed_job),我可以排隊通知。但我不太瞭解如何在生產服務器上運行排隊的作業。我知道我可以在本地服務器的控制檯上運行在生產服務器上部署後運行延遲作業

$ rake jobs:work 

。由於文檔說, 然後,您可以執行以下操作:

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 

# Runs all available jobs and the exits 
RAILS_ENV=production script/delayed_job start --exit-on-complete 
# or to run in the foreground 
RAILS_ENV=production script/delayed_job run --exit-on-complete 

我的問題是如何將它與我的Rails應用程序集成我想創建一個名爲delayed_jobs.rb在配置/初始化文件:

# in config/initializers/delayed_jobs 
script/delayed_job start if Rails.env.production? 

但我不確定這是否正確的方法來處理它。謝謝

回答

0

工作人員作爲單獨的進程運行,而不是作爲Rails應用程序的一部分運行。最簡單的方法是在screen會話中運行rake任務,以防止您退出終端會話時退出該任務。但有更好的方法:

你可以使用諸如monit或God之類的系統或運行由delayed_job提供的工作者腳本。您可以在the answers to this question中找到更多信息。

0

在我experiencie我發現使用capistrano寶石,這在官方文檔的話

它支持腳本和任意任務的執行我的解決方案,並且包括一組理智默認的部署工作流程。

基本上它是一個工具,可以幫助您部署應用程序,包括所有如啓動/回採隊列,遷移數據庫的任務,捆綁新的寶石,所有的這些東西,我們通常用ssh連接做。

Here是一個關於capistrano和webfaction託管的美麗教程。和here是一個很好的模塊,以混合capistrano和delayed_job。在結束時,你應該只對開發環境的關注,因爲每一個需要部署到生產的時間,你會做一個承諾,你的資料庫,然後

$ cap production deploy 

將管理整個生產環境,停止/重新啓動這些隊列,重新啓動應用程序,安裝寶石以及您可以通過Capistrano腳本執行的任何操作。

相關問題