Как развернуть процесс JRuby Resque как файл войны?

У меня есть приложение JRuby / Rails, которое развертывается как файл WAR и запускается на сервере приложений Tomcat. Я хотел бы использовать delayed_job или Resque в качестве инструмента для выполнения длительных заданий, которые проходят через базу данных через те же подклассы ActiveRecord, которые используются моим приложением Rails. И я хочу, чтобы он работал в другом процессе или потоке, чтобы моя веб-часть приложения не казалась медленной.

Инструкции по включению и использованию delayed_job или Resque довольно ясны. Например, после того, как я выполнил всю работу по использованию Resque, мне просто нужно сделать:

QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work

Но это работает только из командной строки. Как мне сделать так, чтобы мои процессы Resque могли запускаться путем развертывания файла WAR в Tomcat? Если да, то это тот же файл WAR с другой конфигурацией или другой файл WAR? Если это другой файл WAR, как его сгенерировать? Нужен ли мне второй Tomcat для процесса Resque / DJ? Есть ли способ поместить процесс Resque / DJ в отдельный поток JRuby / JVM? Есть ли какие-нибудь настройки, которые я должен сделать, чтобы это заработало?


person Jay Godse    schedule 30.01.2012    source источник


Ответы (1)


JRuby распознает команды оболочки, чьи ARGV[0] =~ /ruby$/, и запускает их в процессе, так что вы можете использовать это в своих интересах. Предполагая, что вы включили свой Rakefile в свой военный файл, вы можете запустить поток и запустить в нем Resque с помощью аналогичной команды из инициализатора приложения. Если вы используете Bundler, в нем уже будет настроена среда, и ее следует передать дочернему JRuby в процессе.

person Nick Sieger    schedule 30.01.2012
comment
Я предполагаю, что это означает, что в config / initializers / resque.rb я бы написал что-то вроде: require 'java'; Thread.new делает XXXXXX конец. Что такое XXXXXX, чтобы я мог запустить поток JRuby с помощью задачи Resque? - person Jay Godse; 31.01.2012
comment
В конце концов я добился этого, написав сценарий, который запускает процесс восстановления после того, как файл WAR был взорван на сервере развертывания. То есть нет Tomcat, только JRuby. Возможно, мое понимание Tomcat ошибочно. Tomcat ограничивает вас одним процессом? Если да, нужно ли развертывать Resque в другом Tomcat? Если нет, как мне запустить Resque без зависимости от того, какое приложение взламывает WAR-файл? - person Jay Godse; 23.12.2012