У меня есть веб-приложение JRuby / Rails.Я использую rbenv и JRuby для локального тестирования (используя «сервер rails»), и это работает.Я также распространяю рабочую версию в виде файла WAR и запускаю в Tomcat, и на этом компьютере нет установки JRuby.Оно работает.Теперь мне нужно иметь возможность использовать Resque и Redis для обработки длительных заданий.Я установил Resque / Redis локально и запустил Resque из командной строки как
linux> "QUEUE=* bundle exec rake environment resque:work
Это работает.Я создал небольшой рабочий класс (FooClass), который просто печатает параметр, вызывается Resque, и я могу ставить запросы в очередь, запустив
irb(main):041:0>Resque.enqueue(FooWorker, [1,"4"])
в консоли Rails, и Resque в конечном итоге обрабатываетrequest и печатает [1, "4"]
Я хотел бы иметь возможность запускать эту задачу Resque Rake в среде Tomcat / Java (в которой не установлен JRuby), и у меня есть 3 варианта запускаResque Rake Task.
- Запустите его в Tomcat, но в отдельном потоке Java.Я предпочитаю не делать этого, потому что я хочу иметь возможность убить рабочий процесс и перезапустить его.
- Запустите его из командной строки и вызовите эту команду в etc / init.d при запуске.
- Запустите его в отдельном Tomcat из веб-приложения.
Мой warbler настроен таким образом, что следующие файлы присутствуют в файле 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 / tasks / 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)'
На данный момент я в полной растерянности.Как я могу запустить желаемую задачу Resque Rake в среде Java / Tomcat или просто Java без установки JRuby на этом сервере?