Pregunta

Estoy buscando formas de implementar una aplicación Ruby on Rails (que se ejecuta en JRuby) en una instancia de Tomcat para realizar pruebas.

La instancia de tomcat se ejecuta en un servidor Solaris en el que puedo usar SSH. He analizado el uso de Capistrano, pero no parece haber mucho sobre usarlo para implementarlo en Tomcat, o incluso sobre ejecutarlo bajo JRuby, y sigo encontrando errores en Capistrano debido al entorno Windows / JRuby mi PC está funcionando (sí, es corporativo, no es mi elección, pero tengo que vivir con eso).

Estoy usando warble para compilar el archivo .war, y la aplicación se implementa y se ejecuta correctamente una vez que lo copie e instale manualmente. Quiero algo más fácil y más automatizado para lograrlo.

¿Alguien ha hecho esto antes? La documentación en la web parece bastante delgada.

¿Fue útil?

Solución

No tengo mucha experiencia en esto, así que no sé si puedo ofrecerte la MEJOR manera, pero si Capistrano no funciona, y no puedes tener una instalación de MRI por separado solo para ejecutarlo , solo le quedan algunas alternativas:

Intente ejecutar Rake simple y escriba su propio objetivo de implementación: http://www.gra2.com/article. php / deploy-ruby-on-rails-aplicaciones-rastrillo

O usa Ant o Maven.

O si solo UN servidor tiene que implementar, podría juntar dos scripts de Ruby, uno que escucha en el servidor las solicitudes de apagado / inicio, y un local que ejecuta para: Enviar shutdown, scp over the archivo, enviar inicio.

Por cierto, ¿ha enviado algún error de integración que encuentre con Capistrano al equipo de JRuby? Estoy seguro de que estarían felices de tener alguna contribución. :)

Otros consejos

Estoy ejecutando un proyecto de Rails usando JRuby e implementando en un servidor Tomcat. He elegido desplegar con Capistrano porque automatiza casi todo. Tuve que hacer algunas modificaciones menores en el ciclo de vida de implementación de Capistrano para que se ejecute en Tomcat:

Paso 1: creé una tarea de warble para ejecutarse en el servidor después de que Capistrano actualice el código:

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

Y lo enganchó en el ciclo de vida de Capistrano usando:

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

Mi servidor Tomcat tiene un enlace simbólico que apunta al directorio # {release_path} / tmp / war creado por warble. Si no te gusta esto, puedes modificar fácilmente la tarea de warble para mover el archivo war al directorio de Tomcat.

Paso 2: anulo las tareas deploy: start y deploy: stop para que inicien el servidor Tomcat en lugar de un servidor 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

Ejecuto tareas de Capistrano usando MRI en lugar del intérprete JRuby.

Podría valer la pena mirar 'Vlad el implementador', agrega remote_task a Rake, lo que te permite ejecutar tareas en un servidor remoto. Personalmente, sin embargo, prefiero tener una tarea de Rake estándar en el servidor, ssh y ejecutar esa tarea - que luego haría un svn checkout, hacer el archivo WAR, lo que sea ...

Probablemente usaría Ant para esto. Después de todo, es solo otro archivo WAR, ¿verdad? No sé qué versión de Tomcat está utilizando, pero la versión 4.1x viene con una tarea Ant para implementar a Tomcat .

Hay algunas recetas de Capistrano para implementarlo en Tomcat. He creado una en una gema llamada capistrano-tomcat . Toma un WAR que hayas construido (probablemente con Warbler ) y se despliega e inicia una instancia de Tomcat en una servidor remoto.

La fuente está en Github: http://github.com/rhunter/capistrano-tomcat

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top