2011-02-02 8 views
4

У нас есть приложение Rails (2.2.2), запущенное на сервере Tomcat7 с использованием warbler (1.2.1) и JRuby (1.5.6), но так как мы хотим упростить развертывание до несколько машин, мы хотим запустить задачи рейка, например db:migrate, под местоположением WEB-INF tomcat. Мы упаковали папку db вместе со всеми миграциями.Запуск задач рейка под Tomcat и JRuby

Один из способов мы видели рекомендуется онлайн не работает:

java -jar lib/jruby-core-1.5.6.jar -S $JRUBY_HOME/bin/rake db:migrate RAILS_ENV=staging 

/var/lib/jruby/bin/rake:9:in `require': no such file to load -- rubygems (LoadError) 
     from /var/lib/jruby/bin/rake:9 

После добавления к ENV:

GEM_HOME=$JRUBY_HOME/lib/ruby/gems/1.8 
RUBYLIB=$JRUBY_HOME/lib/ruby/site_ruby/1.8 

Та же команда дает:

/var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:32 warning: already initialized constant RAKEVERSION 
/var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- fileutils (LoadError) 
     from /var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
     from /var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:35 
     from /var/lib/jruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:31:in `require' 
     from /var/lib/jruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
     from /var/lib/jruby-1.5.6/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:29 
     from /var/lib/jruby-1.5.6/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:19:in `load' 
     from /var/lib/jruby/bin/rake:19 

И если Я просто запускаю:

jruby -S $JRUBY_HOME/bin/rake db:migrate RAILS_ENV=staging 

Я получаю большой столбец ошибок драгоценных камней, полученных в результате продажи драгоценных камней. (OutOfMemoryError, NUllPointerException и т. Д., Что на самом деле не согласуется между прогонами).

Этот вопрос (How do I run rake rake tasks in a rails app which is served by tomcat with jruby war deployment?) также не имел укусов. Любые предложения приветствуются.

Cheers.

ответ

4

Оказывается, эта команда работает

java -jar /var/lib/jruby/jruby-complete-1.5.6.jar -S rake db:migrate RAILS_ENV=staging 

до тех пор, как я скачать JRuby-полный кувшин и убедитесь, что у меня есть ENV:

RUBYLIB=$JRUBY_HOME/lib/ruby/site_ruby/1.8 
GEM_HOME=$JRUBY_HOME/lib/ruby/gems/1.8 
+0

Это интересно. GEM_HOME имеет кучу gem-файлов, которые накапливаются в каталоге WEB-INF. Однако у RubyLIB, похоже, есть куча файлов, связанных с рубином. Когда я развертываю Tomcat, мы намерены развернуть не связанные с Ruby вещи, кроме военного файла. Каковы необходимые файлы в RubyLIB для выполнения этой работы? Если я знаю, я могу просто закрутить config/warble.rb, чтобы включить их. –

2

Я имел эту проблему, как хорошо, но на Окна.

на основе this warbler issue, я был в состоянии собрать пакетный скрипт для Windows, чтобы включить в развертывании и сделать установку DB простой для нашего SAs:

SET RAILS_ENV=production 
SET BUNDLE_WITHOUT=development:test 
SET BUNDLE_GEMFILE=Gemfile 
SET GEM_HOME=gems 
java -classpath "lib/*" org.jruby.Main -S rake db:create db:migrate db:seed 
pause 

Запуск этого из каталога WEB-INF из развернутое приложение делает трюк. Мне нужно было добавить каталог db, Rakefile и исполняемый сценарий Windows в мой конфигуратор warble.rb, чтобы все было хорошо.

активно работает над тем, чтобы получить правильную поддержку рейка в warbler, так что это должен быть ответ «на данный момент» (и, безусловно, есть более чистые способы сделать это, если я не был нажимаю крайний срок), но Я решил, что поделюсь с вами, потому что это был спотыкающийся момент.

 Смежные вопросы

  • Нет связанных вопросов^_^