2015-02-11 46 views
1

遵循rails-cast(http://railscasts.com/episodes/271-resque?view=comments),我能夠使用worker和rake任務同樣設置我的rails應用程序。如何從rails應用程序運行'resque:work'rake任務?

然而,由於在軌鑄規定,一旦我開始我的Rails服務器,我有一個單獨的終端窗口發出以下命令:

TERM_CHILD=1 QUEUES=* rake resque:work 

這得到了我和運行,並我沒有問題。但是,我不想在終端上觸發rake命令(或者編寫啓動shell腳本),而是在應用程序啓動時從Rails本身發出此終端命令(TERM_CHILD = 1 QUEUES = * rake resque:work)在應用程序在服務器上的正常運行時間內可用。

我正在學習Rails框架的過程中,所以如果您能給我一些幫助,並讓我知道如何/放置任何代碼片段,您可能會提供給我,我將不勝感激。

非常感謝您提前。

這裏是我的環境規格:

  • 我使用JRuby(JRuby的1.7.16.1(1.9.3p392)2014年10月28日4e93f31 Java的熱點(TM)64位服務器VM 1.7。 0_72-B14 + JIT [Linux的AMD64])

  • 的Rails 4.1.8版本

  • 我開發的Linux操作系統Ubuntu 14.04

  • 我將部署這個應用程序的Wi作爲WAR包的Tomcat服務器上的ndows 2008服務器
  • 我正在使用PostgreSQL作爲我的數據庫。

回答

1

該方法會讓您很難關閉您的resque工人。我建議使用一個叫做foreman的通用寶石來處理這個問題。我要讓你看看一個文檔,但是你Procfile看起來是這樣的:

web: rails s -p $PORT 
resque: TERM_CHILD=1 QUEUES=* rake resque:work 

你將能夠通過只在控制檯中運行foreman命令啓動兩條軌道和resque。這也可以讓你輕鬆退出。

每個操作的消息更新:

require 'resque/tasks' 
ENV['TERM_CHILD'] = 1 
ENV['QUEUES'] = '*' 
Thread.new { Rake::Task["resque:work"] } 

Thread.new是存在的,因爲它否則會導致應用程序的其餘部分永遠不會加載。

+0

謝謝,但我不認爲工頭會適合這項法案。 問題是,我的Windows生產服務器上沒有安裝ruby,因此終端上無法使用rails/rake/foreman命令。 如果你可以提出一種從rails內部啓動resque工作者的方法(我同意,一旦rails應用程序停止,我想殺死工作者)。 非常感謝你 – 2015-02-11 23:15:15

+0

更新你的情況。 – RipTheJacker 2015-02-12 00:11:00

+0

非常感謝 - 這是我最終想出的完全相同的解決方案。我將這段代碼放入初始化程序中,它像一個魅力。 – 2015-02-12 03:27:15

相關問題