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