我有一個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?