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

时间:2012-01-30 05:55:19

标签: tomcat delayed-job resque jrubyonrails warbler

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

包含和使用delayed_job或Resque的说明非常清楚。例如,一旦我完成了使用Resque的所有jiggery-pokery,我只需要这样做:

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我必须做​​到这一点?

1 个答案:

答案 0 :(得分:0)

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