2011-04-28 17 views
5

目前我們在JRuby中使用Resque,並且在開發時我們使用兩種方式啓動Worker。JRuby中的線程安全Resque Workers部署爲WAR時

  • 使用耙:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
  • 編程,經過初始化的西納特拉機架應用程序(或其他),最終調用了一類:

def start 
    @worker = Resque::Worker.new(@queues) 
    @worker.verbose = @vervose 
    @worker.work(@interval) 
end 

def stop 
    @worker.try(:shutdown) 
end 

雖然這兩個這些解決方案對我們來說是可以接受的。例如,我擔心部署到Tomcat時會如何工作。

在Ruby中,通常情況下,你會產生或妖魔化工人,然後使用監視工具來觀察PID。

在部署時以編程方式啓動Workers是否有意義?我想知道是否它開始在java中的新線程或混亂jruby進程,如果不是我應該使用,但另一個調度庫像石英啓動一個工人?或在部署任務中啓動的rake任務?

我可以創建一個Worker模型,然後讓它跟蹤db中的工作人員,但這對我沒有意義。

任何幫助或知識將不勝感激。

謝謝。

參考文獻:

https://github.com/defunkt/resque

http://rubydoc.info/github/defunkt/resque/master/Resque/

http://blog.thomasmango.com/post/636319317/resque-in-production

https://gist.github.com/486161

回答

0

使用rake resque:work將引導您的Rails環境,並開始一個工人,其調查工作的時候,叉本身進入(分)工人進程,處理第在工作,然後退出。

如果你想運行多個工人然後使用COUNT變量:

QUEUE=* COUNT=5 jruby -J-cp /path/to/library -S rake environment resque:work

什麼方面的,這將被部署到Tomcat?這是所有的命令行。

+0

如果您的JRuby/Rails應用程序通過WAR文件部署到Tomcat中,您將如何完成這項工作?我是否必須部署2個Tomcat,一個用於「rails server」,一個用於「rake environment resque:work」?如果是這樣,怎麼樣? – 2012-01-31 18:18:26

0

遲了一年多了,但我想你要找的答案是在(本機)Java線程中運行Resque工作器。由於您使用JRuby :: Rack,因此答案爲JRuby::Rack::Worker。添加到您的web.xml

<context-param> 
    <param-name>jruby.worker</param-name> 
    <param-value>resque</param-value> 
</context-param> 
<!-- 
<context-param> 
    <param-name>QUEUES</param-name> 
    <param-value>mails,posts</param-value> 
</context-param>--> 

<listener> 
    <listener-class>org.kares.jruby.rack.WorkerContextListener</listener-class> 
</listener> 

如果你啁啾有一個web.xml.erb樣品https://github.com/kares/jruby-rack-worker只需創建一個配置/ web.xml.erb文件和複製內容對它...如果您碰巧使用Trinidad,則會在其上創建一個extension(因此您不需要設置web.xml並複製.jar文件)。