0

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

包含和使用delayed_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 线程中?有没有我必须做的任何配置 jiggery-pokery 才能做到这一点?

4

1 回答 1

0

JRuby does recognize shell commands whose ARGV[0] =~ /ruby$/ and run them in-process, so you could use this to your advantage. Assuming you include your Rakefile in your war file, you could start a thread and launch Resque in it with a similar command from an application initializer. If you're using Bundler, it will already have the environment set up and it should be passed to the in-process child JRuby.

于 2012-01-30T20:06:13.203 回答