Каков наилучший способ развертывания приложения 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 файл, что угодно...
Ответ 4
Я бы использовал Ant для этого. В конце концов, это просто еще один WAR файл, верно? Я не знаю, какую версию Tomcat вы используете, но версия 4.1x поставляется с задачей Ant для развертывания в Tomcat.
Ответ 5
Там несколько рецептов Capistrano для развертывания в Tomcat - я построил один в драгоценный камень под названием capistrano-tomcat. Требуется WAR, которую вы построили (возможно, с Warbler) и развертывает и запускает экземпляр Tomcat на удаленном сервере.
Источник включен в Github: http://github.com/rhunter/capistrano-tomcat