Tomcat 如何将JRuby Resque进程部署为war文件?

Tomcat 如何将JRuby Resque进程部署为war文件?,tomcat,delayed-job,resque,jrubyonrails,warbler,Tomcat,Delayed Job,Resque,Jrubyonrails,Warbler,我有一个JRuby/Rails应用程序,它作为WAR文件部署并在Tomcat应用服务器中运行。我想使用delayed_job或Resque作为一种工具来执行长时间运行的作业,这些作业通过我的Rails应用程序使用的相同ActiveRecord子类在数据库中执行。我希望它在不同的进程或线程中运行,这样就不会使应用程序面向web的一面看起来很慢 包含和使用延迟作业或Resque的说明非常清楚。例如,一旦我完成了使用Resque的所有jiggery扑克游戏,我只需执行以下操作: QUEUE=* jru

我有一个JRuby/Rails应用程序,它作为WAR文件部署并在Tomcat应用服务器中运行。我想使用delayed_job或Resque作为一种工具来执行长时间运行的作业,这些作业通过我的Rails应用程序使用的相同ActiveRecord子类在数据库中执行。我希望它在不同的进程或线程中运行,这样就不会使应用程序面向web的一面看起来很慢

包含和使用延迟作业或Resque的说明非常清楚。例如,一旦我完成了使用Resque的所有jiggery扑克游戏,我只需执行以下操作:

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线程中?我必须做些什么配置上的诡计才能让这一切顺利进行

JRuby确实能够识别ARGV[0]=~/ruby$/的shell命令,并在进程中运行它们,因此您可以利用它。假设您在war文件中包含Rakefile,您可以启动一个线程,并使用应用程序初始值设定项中的类似命令在其中启动Resque。如果您使用的是Bundler,它将已经设置好环境,并且应该将其传递给进程中的子JRuby。

我假设这意味着在config/initializers/resque.rb中,我将编写如下内容:require'java';Thread.new do XXXXXX结束。什么是XXXXXX,这样我就可以用Resque任务启动JRuby线程了?我最终通过编写一个脚本来实现这一点,该脚本在部署服务器上分解WAR文件后启动Resque进程。i、 没有Tomcat,只有JRuby。也许我对Tomcat的理解有缺陷。Tomcat是否将您限制为一个进程?如果是这样,我是否必须在不同的Tomcat中部署Resque?如果不是,我如何启动Resque而不依赖于web应用程序爆炸WAR文件?