Pasajeros al tren! o introducción a mod_rails para Apache 2

Posted by calas Fri, 25 Apr 2008 10:25:00 GMT

El problema

Ruby on Rails ha sido el boom en los últimos dos o tres años en cuanto a desarrollo web se refiere. Muchos desarrolladores nos hemos pasado felices y contentos a desarrollar en Ruby, un lenguaje de programación hasta ahora casi desconocido y que desde el lanzamiento de Rails ha empezado tomar tanto protagonismo que ahora ocupa el noveno lugar en la lista de los lenguajes de programación más utilizados.

La creciente comunidad de programadores en ruby se ha volcado con el opensource y están saliendo a la luz muchos proyectos interesantes como JRuby, una implementación completa de Ruby sobre JVM; Rubinus, otra implementación sobre una VM pero esta vez sobre C; YARV, otra máquina virtual en C que cuentan es muy rápida y que será la VM de Ruby 2.0 (ya está incluida en la versión 1.9.0 aunque esta no está lista para producción aun sino que es una especie de preview la versión 2.0); Merb, un framework de desarrollo Web inspirado en Rails que cada vez está más interesante; Camping, un miniframework para la creación de Webs sencillas y toda una lista enorme de proyectos.

Uno de los problemas que encontraban muchos desarrolladores de PHP era la dificultad para hacer el deploy de aplicaciones Rails en los shared-hostings. Hasta ahora no había una manera fácil de hacer un deploy con Apache, o se recurría a fastcgi que es la solución en los hostings compartidos como Dreamhost o se contrataba un VPS o servidor dedicado donde un Apache, Lighthttpd o Nginx hacían de proxy y balanceador entre los servidores mongrel, thin o lo que fuera de las aplicaciones rails.

La solución

Y por qué hablo en pasado si hasta día de hoy sigue siendo la forma de hacer deploy? Este mismo blog está servido por un nginx que hace de proxy a 2 mongrels.

Es que el pasado 11 de Abril se anunció Phusion Passenger (aka mod_rails) que promete que hacer un deploy sobre apache sea extremadamente sencillo, solo cuestión de subir los ficheros sin hacer nada de configuración especifica de Rails, mongrel u otro servidor.

La instalación

Anoche me he puesto a probarlo y he quedado impresionado. Al punto de que toda la instalación, incluida la de apache, me tomó solo unos 10 o 15 minutos.

No es mi objetivo contarles como instalar Rails, Apache 2 o ruby, sobre eso hay muchas cosas escritas y pueden buscar en google. O pedírmelo en un comentario y ya haré otro post.

Así que descontando todo eso la cosa se reduce a:

1- Instalar Phusion Passenger:

      
    sudo gem install passenger
  

2- Compilar, instalar y configurar el módulo de apache:

  
   sudo passenger-install-apache2-module
  

Este comando les indicará si les falta alguna dependencia y si todo va bien les mostrará 3 lineas al final que tienen que incluir en su configuración de Apache, en mi caso fueron:

  
    LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so
    RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
    RailsRuby /usr/bin/ruby1.8
  

Pero no siempre son iguales, así que no vale hacer copy & paste

3- Configurar un virtual host para tu aplicación.

En la configuración de apache incluir un virtual host para la aplicación de Rails donde indiques el directorio donde esta reside:

  
    <VirtualHost *>
      ServerName myrailsapp.com
      DocumentRoot /home/sites/myrailsapp/public
    </VirtualHost>
  

4- El robocop:

Abrir el navegador e ir http://myrailsapp.com (o la url de tu sitio si quieres funcione ;)) ya debería estar funcionando. El environment que se carga por defecto es el de producción, pero hay varias opciones de configuración que puedes ver en la guía de usuario de passenger

Todavía tengo que hacer muchas pruebas para pasar mis aplicaciones de la combinación nginx+mongrel_cluster a mod_rails aunque los benchmarks muestran excelentes resultados habría que valorar variables como consumo de recursos, etc. Nginx consume menos recursos que apache pero los mongrels son muy hambrientos y terminan consumiendo mucho. Otro tema a valorar es la robustez pero ya eso serían temas para otros posts.

El futuro.

Mirando el panorama el futuro de Rails y los demás frameworks basados en Ruby parece prometedor. Uno de los beta testers de passenger fue Dallas de Dreamhost, por lo que cabe esperar que dentro de poco sus planes de hosting incluyan mod_rails.

El problema seguiría siendo los pocos recursos disponibles en un ambiente de alojamiento compartido pero los chicos de Engine Yard están haciendo un esfuerzo importante en Rubinius, Sun en JRuby y Ruby 2.0 saldrá con YARV incorporado. Todos estos proyectos mejoran muchísimo el rendimiento actual de Ruby, corrigiendo muchos errores de implementación de las versiones actuales. Los chicos de Phussion prometen un consumo de 33% menos de memoria usando mod_rails con Ruby Enterprise Edition, aunque todavía no está disponible.

Creo que pronto veremos a los shared hosting tradicionales ofreciendo un buen soporte para aplicaciones en Ruby on Rails y el mundo será un mejor lugar, al menos para los programadores de webs. Creo que así volvería a activar mi cuenta en Dreamhost.

Actualmente Phussion Passenger solo soporta aplicaciones en Ruby on Rails, al fin y al cabo es mod_rails y no mod_ruby, pero al ser un proyecto opensource puedo apostar a que dentro de muy poco tiempo la comunidad habrá aportado soporte para Camping, Merb, Nitro o cualquier otro framework.

Posted in  | Tags , , ,  | 2 comments