martes, 1 de marzo de 2016

Ruby on Rails: despliegue en Apache

Para poner una aplicación Ruby on Rails en linea podemos usar el WEBrick y hacer algún escarceo pero para dejarlo desatendidamente en linea lo suyo es poner un Apache o un nginx. Como bien sabes tanto Apache como nginx son servidores web y solo llegan hasta la capa HTTP. Para usar páginas dinámicas producidas con cualquier aplicación se necesita un módulo que la ejecute. Esto es idéntico para PHP, Java, python y por supuesto Ruby.

El módulo que más se usa para Ruby on Rails es Passenger. También es posible usar Passenger para lenguajes como node.js o python.

Los pasos que vamos a dar son los siguientes:
1.- Instalar passenger
2.- Compilar para nuestro apache y sistema
3.- Configurar Apache para nuestra aplicación



INSTALACIÓN DE PASSENGER

Se instala como una gema. Comprueba si lo tienes instalado en tu sistema:
$ gem list passenger

*** LOCAL GEMS ***
passenger (5.0.24, 5.0.23

Si no es el caso, instalas la gema:
$ gem install passenger


COMPILACIÓN PARA APACHE

Este paso deberías hacerlo como root. Para la versión 5.0.24, en mi caso lo tengo en "/var/lib/gems/2.2.0/gems/passenger-5.0.24". Es un proceso guiado de varios pasos. Ejecúta lo siguiente sin más:
# /var/lib/gems/2.2.0/gems/passenger-5.0.24/bin/passenger-install-apache2-module


Es posible que el proceso falle por la falta de alguna librería. Esto es muy específico de cada equipo. Lee atentamente los mensajes de error e instala los paquetes necesarios para la compilación en tu sistema.

Configuración del Passenger

El siguiente es un ejemplo de fichero para usar en Apache2. Lo habitual es colocarlo en el /etc/apache2/sites-available y usar a2ensite/a2dissite (hace un enlace simbólico a /etc/apache2/sites-enabled). Una vez creado este fichero, es necesario reiniciar Apache.

Seguramente estarás familiarizado con la configuración de apache. Si no es tu caso te diré que hemos supuesto:
  • Suponemos que el servicio estará en la máquina con nombre DNS www.servidorpruebaruby.com y escuchará en el puerto 8080
  • Vamos a usar la versión 2.2 de Ruby
  • Suponemos que la aplicación está ubicada en /var/www/rails/RoRapp
  • Queremos poner producción en linea. Cambiando "RailsEnv" puedes especificar otro entorno como development o test.


Aquí tienes el fichero de configuración para Apache concordante con lo que hemos comentado en el post:

LoadModule passenger_module /var/lib/gems/2.2.0/gems/passenger-5.0.24/buildout/apache2/mod_passenger.so
<ifmodule mod_passenger.c="">
 PassengerRoot /var/lib/gems/2.2.0/gems/passenger-5.0.24
 PassengerDefaultRuby /usr/bin/ruby2.2
</ifmodule>

Listen www.servidorpruebaruby.com:8080
NameVirtualHost  www.servidorpruebaruby.com:8080

<virtualhost www.servidorpruebaruby.com:8080="">
   ServerName www.servidorpruebaruby.com
   DocumentRoot /var/www/rails/RoRapp/public
   RailsEnv production
   # RailsEnv development

   ErrorLog /var/log/apache2/RoRapp_error_log
   TransferLog /var/log/apache2/RoRapp_access_log
   LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" 
   LogLevel warn

   AllowOverride all              
</virtualhost>


No hay comentarios:

Publicar un comentario