我有一个JRuby/Rails web应用程序。我使用rbenv和JRuby在本地进行测试(使用“rails server”),并且它工作正常。 我还将生产版本作为WAR文件分发并在Tomcat中运行,并且该机器没有安装JRuby。有用。 我现在需要能够使用Resque和Redis来处理长时间运行的作业。我在本地安装Resque/Redis的和命令行运行Resque 作为如何在没有安装JRuby并仅使用Java的JRuby/Tomcat deploymet中使用Resque应用运行Ruby/Rails?
linux> "QUEUE=* bundle exec rake environment resque:work
它的工作原理。我创建了一个小工人类(FooClass)刚刚打印出的参数,由Resque, 打来电话,我可以通过运行
irb(main):041:0>Resque.enqueue(FooWorker, [1,"4"])
在Rails的控制台
入队的请求,并Resque最终处理请求并打印[1,“4”]
我想能够在Tomcat/Java环境(没有安装JRuby)中运行此Resque Rake任务, ,我有3个选项可以运行Resque耙任务。
- 在Tomcat中运行它,但在单独的Java线程中运行。我宁愿不这样做,因为我希望能够杀死工作进程并重新启动它。
- 从命令行运行它,并在启动时通过etc/init.d调用该命令。
- 从Web应用程序的单独Tomcat运行它。
我莺配置使得下列文件存在于应用程序WAR文件,并获得爆炸到的webapps/WEB-INF 出来的webapps/ABC/WEB-INF当Tomcat启动应用程序。
Gemfile
Rakefile
web.xml
lib/jruby-core-1.6.4.jar
lib/jruby-rack-1.0.10.jar
lib/jruby-stdlib-1.6.4.jar
lib/tasks/abc.rake
lib/tasks/resque.rake
gems/gems/bundler-1.0.21
gems/gems/warbler-1.3.2
gems/gems/rails-3.0.10
(other gem files in gems/gems)
config/warble.rb
文件的config/warble.rb看起来是这样的:
Warble::Config.new do |config|
config.dirs=%w{app config lib lob vendor tmp}
config.includes=FileList["./Rakefile"]
config.webxml.jruby.compat.version = "1.9"
end
,将文件lib /任务/ resque.rake有
require "resque/tasks"
task "resque:setup" => :environment
task "resque:work" => :environment
我的Gemfile包括下面几行:
source 'http://rubygems.org'
gem 'bundler', '1.0.21'
gem 'rails', '3.0.10'
gem 'rake', '0.8.7'
gem 'resque'
在网上搜索产生运行Rake任务(从WEB-INF /内)通过以下方式,而不使用JRuby:
linux> java -cp lib/jruby-core-1.6.4.jar -S rake
的结果
Unrecognized option: -S
Could not create the Java virtual machine
只是为了好玩,我试图
linux> java -jar lib/jruby-core-1.6.4.jar -S rake
结果是
jruby: No such file or directory -- rake (LoadError)
然后我尝试下载jruby-complete-1.6。4到那个目录,我跑
linux> java -jar lib/jruby-complete-1.6.4.jar -S rake -T
(in /WEB-INF)
rake aborted!
no such file to load -- bundler/setup
/WEB-INF/Rakefile:4:in `(root)'
在这一点上,我在一个完整的损失。如何在Java/Tomcat或Java环境中运行我所需的Resque Rake任务,而无需在该服务器上安装JRuby?