2012-01-30 21 views
0

我有一個JRuby/Rails應用程序,它被部署爲WAR文件並在Tomcat應用程序服務器中運行。我想使用delayed_job或Resque作爲工具來執行長時間運行的作業,這些作業通過我的Rails應用程序使用的相同ActiveRecord子類來存儲數據庫。我希望它在不同的進程或線程中運行,以免讓我的應用程序面向網絡的一面看起來很慢。如何將JRuby Resque進程部署爲war文件?

包含並使用delayed_job或Resque的說明很清楚。例如,一旦我已經做了所有的暗中搗鬼的使用Resque,我只是要做:

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

但是,這隻能通過命令行的作品。我如何獲取它,以便通過將WAR文件部署到Tomcat來運行我的Resque進程?如果是這樣,它是否是具有不同配置或不同WAR文件的相同WAR文件?如果它是一個不同的WAR文件,我該如何生成它?我需要第二個Tomcat進行Resque/DJ過程嗎?有沒有辦法將Resque/DJ進程放到自己的JRuby/JVM線程中?是否有任何配置jiggery-pokery我必須做​​的才能實現這個目標?

回答

0

JRuby確實認可了shell命令,它們的運行在進程中,因此您可以使用它來獲得優勢。假設你在你的war文件中包含你的Rakefile,你可以啓動一個線程並使用來自應用程序初始化程序的類似命令在其中啓動Resque。如果你使用的是Bundler,它已經建立了環境,它應該被傳遞給進程內的子JRuby。

+0

我認爲這意味着在配置/初始化/ resque.rb我會寫如:require'java'; Thread.new做XXXXXX結束。什麼是XXXXXX,以便我可以使用Resque任務啓動JRuby線程? – 2012-01-30 23:57:22

+0

我最終通過編寫腳本啓動了這個工作,該腳本在WAR文件在部署服務器上爆炸後啓動Resque進程。即沒有Tomcat,只有JRuby。也許我對Tomcat的理解是有缺陷的。 Tomcat是否將你限制在一個進程中?如果是這樣,我是否必須在不同的Tomcat中部署Resque?如果沒有,我怎樣才能啓動Resque而不依賴於爆炸WAR文件的Web應用程序? – 2012-12-23 15:18:55