2012-01-30 48 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