我有一个JRuby / Rails应用程序,它作为WAR文件部署并在Tomcat应用程序服务器中运行。我想使用delay_job或Resque作为工具来执行长时间运行的作业,这些作业通过我的Rails应用程序使用的相同ActiveRecord子类来遍历数据库。而且我希望它在不同的进程或线程中运行,以免使应用程序的面向Web端看起来很慢。
包含和使用delay_job或Resque的说明非常清楚。例如,一旦我完成了所有的拼图游戏来使用Resque,我只需要做:
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
但这仅在命令行中有效。如何获取它,以便通过将WAR文件部署到Tomcat来运行我的Resque进程?如果是,是同一个WAR文件,但配置不同还是WAR文件不同?如果它是另一个WAR文件,该如何生成? Resque / DJ流程是否需要第二个Tomcat?有没有办法将Resque / DJ进程放入其自己的JRuby / JVM线程?要进行此操作,是否需要配置任何配置?
最佳答案
JRuby确实会识别ARGV[0] =~ /ruby$/
的shell命令并在进程中运行它们,因此您可以利用此优势。假设将Rakefile
包含在war文件中,则可以使用应用程序初始化程序中的类似命令启动线程并在其中启动Resque。如果您使用的是Bundler,它将已经设置了环境,应该将其传递给进程内子JRuby。
关于tomcat - 如何将Ruby Rescue进程部署为war文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9059936/