Каков наилучший способ развертывания приложения JRuby on Rails для Tomcat?

Я рассматриваю способы развертывания приложения Ruby on Rails (работающего на JRuby) с экземпляром Tomcat для тестирования.

Экземпляр tomcat работает на сервере Solaris, к которому я могу подключиться SSH. Я посмотрел на использование Capistrano, но, похоже, там не так много, чтобы использовать его для развертывания в Tomcat или даже для запуска его под JRuby, и я продолжаю сталкиваться с ошибками в Capistrano из-за среды Windows/JRuby мой компьютер работает (да, это корпоративный - не мой выбор, но мне нужно жить с ним).

Я использую warble для создания файла .war, и приложение развертывается и работает отлично, как только я его вручную скопирую и разворачиваю. Я хочу что-то более легкое и автоматическое, чтобы на самом деле получить его там.

Кто-нибудь сделал это раньше? Документация в Интернете кажется довольно тонкой.

Ответ 1

У меня нет большого опыта в этом, поэтому я не знаю, могу ли я дать вам лучший способ, но если Capistrano не работает, и вы не можете иметь отдельную установку MRI, чтобы запустить ее, у вас осталось несколько альтернатив:

Попробуйте запустить простой Rake и создайте собственную цель развертывания: http://www.gra2.com/article.php/deploy-ruby-on-rails-applications-rake

Или используйте Ant или Maven.

Или, если вам нужен только один сервер, вы можете просто взломать два сценария Ruby - один, который прослушивает сервер для запросов на завершение/запуск, и один локальный, на котором вы запускаете: Отправить shutdown, scp over файл, отправьте запуск.

Кстати, вы отправили какие-либо ошибки интеграции, которые вы нашли с Capistrano, в команду JRuby? Я уверен, что они были бы рады внести какой-либо вклад. :)

Ответ 2

Я запускаю проект Rails с использованием JRuby и развертывания на сервере Tomcat. Я выбрал развертывание с Capistrano, потому что он автоматизирует практически все. Мне пришлось внести несколько незначительных изменений в жизненный цикл развертывания Capistrano, чтобы заставить его работать на Tomcat:

Шаг 1: я создал задание с чередованием, которое будет запускаться на сервере после того, как Capistrano обновит код:

desc "Run the warble command to deploy the site"
namespace(:deploy) do
  task :warble do
    run ". ~/.profile;cd #{release_path};warble"
  end
end

И подключился к жизненному циклу Capistrano, используя:

after 'deploy:update_code', 'deploy:warble'

Мой сервер Tomcat имеет символическую ссылку, указывающую на каталог #{release_path}/tmp/war, созданный warble. Если вам это не нравится, вы можете легко изменить задачу warble, чтобы переместить файл войны в каталог Tomcat.

Шаг 2: я переопределил задачи deploy:start и deploy:stop, чтобы они запускали сервер Tomcat вместо сервера Mongrel:

desc "Starts the Tomcat Server"
namespace(:deploy) do
  task :start do
    sudo "#{tomcat_home}/bin/startup.sh"
  end
end

desc "Shutdown the Tomcat Server"
namespace(:deploy) do
  task :stop do
    sudo "#{tomcat_home}/bin/shutdown.sh"
  end
end

Я запускаю задачи Capistrano с использованием MRI, а не интерпретатора JRuby.

Ответ 3

Возможно, стоит взглянуть на "Влад развертывателя", он добавляет remote_task в Rake, позволяя запускать задачи на удаленном сервере. Лично, однако, я предпочитаю иметь стандартную задачу Rake на сервере, ssh in и запускать эту задачу - которая затем выполнит проверку svn, сделает WAR файл, что угодно...

Ответ 5

Там несколько рецептов Capistrano для развертывания в Tomcat - я построил один в драгоценный камень под названием capistrano-tomcat. Требуется WAR, которую вы построили (возможно, с Warbler) и развертывает и запускает экземпляр Tomcat на удаленном сервере.

Источник включен в Github: http://github.com/rhunter/capistrano-tomcat