HowTo: Integrando Rails con apache

railsApache.pngBueno, como dije en el anterior post, voy a explicar como integrar Rails con Apache, para que sea éste nuestro servidor Web. El servidor de Rails WEBrick (ejecutando script/server en el directorio de nuestra aplicación de Rails) cumple su función, sobre todo es útil para el desarrollo, pues muestra mucha información. Pero para un entorno real, no puede competir con un servidor web "de los de verdad" (estaría bien respaldar ésto con números, para otro día que me aburra...). Otra opción sería usar Rails con lighttpd, ésto lo he visto mucho por la red, y parece dar buenos resultados, pero como Apache es mucho Apache, prefiero usarlo :P.

Seguiré desde el HowTo anterior, es decir, tenemos una aplicación básica en ~/dev/rails la cual al final de este tutorial será servida a los clientes mediante apache. Supongo que estamos usando Ubuntu Dapper, para otra distro sería todo perfectamente aplicable, pero habría que cambiar, posiblemente, algunos de los binarios/directorios/archivos/nombres_de_paquetes por otros ligeramente diferentes. Intentaré ir explicando las cosas de la forma más generica posible... ok, entonces ¿qué necesitamos para poder servir aplicaciones RoR con apache?

  • Mod_rewrite (para apache)
  • Mod_fcgid (para apache)
  • fcgid en nuestro sistema
  • Modulo fcgid para ruby
  • Configurar apache, añadiendo un virtualhost (o un Directory + Alias)

Vayamos por partes, como dijo Jack el destripador. Mod_rewrite lo tendrás casi 100% seguro, a no ser que hayas compilado apache indicandole que no quieres ese modulo. ¿Cómo sabemos que lo tenemos?

$ /usr/sbin/apache2 -l # [el binario de apache] -l
Compiled in modules:
core.c
(...)
mod_alias.c
mod_so.c
$ ls /etc/apache2/mods-enabled/ # aquí aparecerán los módulos activos

Debe de salir en uno de esos dos comandos, si lo tienes instalado de los repositorios de ubuntu, saldrá en mods-enabled ;).

Mod_fcgid para apache, ok. Instalemoslo o si eres un autentico macho ibérico que compila todo, compila tu apache con este modulo!. Para el resto de mortales, simplemente esto:

$ sudo aptitude install libapache2-mod-fcgid
$ sudo /etc/init.d/apache2 force-reload
$ more /etc/apache2/mods-enabled/fcgid.conf # ahora tendremos estos dos ficheros, este

AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock

$ more /etc/apache2/mods-enabled/fcgid.load # y este!
LoadModule fcgid_module /usr/lib/apache2/modules/mod_fcgid.so

Ahora instalemos fcgi en nuestro sistema como librería compartida, podemos hacer un aptitude search fcgi para ver paquetes candidatos, en el caso de Ubuntu Dapper, simplemente:

$ sudo aptitude install libfcgi0

Ahora solo nos queda por instalar el modulo fcgi para ruby, para ello hacemos un:

$ sudo aptitude install libfcgi-ruby1.8 # o la que nos corresponda

Ahora hagamos la prueba definitiva, para saber si todo va bien:

$ irb
irb(main):001:0> require 'fcgi.so'
=> true
irb(main):002:0> require 'fcgi'
=> true

Muy bien!, ya tenemos todo preparado, ahora configuremos apache!. Haré la configuración con un Virtualhost, pues lo veo más cómodo (pero se podría hacer también con un "Directory" más un alias). Añadimos a la configuración de apache lo siguiente:

$ sudo vi /etc/apache2/sites-available/default # en dapper, sería en este fichero


ServerName rails
DocumentRoot /home/blaxter/dev/rails/public/
ErrorLog /home/blaxter/dev/rails/log/apache.log

Options ExecCGI +FollowSymLinks
AllowOverride all
Allow from all
Order allow,deny



$ sudo vi /etc/hosts # añadimos un linea como esto:
127.0.0.1 rails
$ sudo /etc/init.d/apache2 force-reload # reiniciamos apache

Debes cambiar /home/blaxter/dev/rails por la ruta de tu aplicación rails!.

Ahora debemos hacer un par de cosas antes de dejar todo listo. Primero borrar las sesiones actuales

$ cd ~/dev/rails # dir de nuestra aplicación
$ rm tmp/sessions/* # es importante hacer esto, hazlo!

luego permitir al servidor leer y escribir en nuestra aplicación, Apache corre como usuario www-data, una forma de permitirle leer los archivos y escribir (concretamente debe escribir en ./tmp/*), sería poner el proyecto con nombre de usuario www-data y luego añadirnos a nosotros como miembro de www-data, esta es una opción, puede haber cientas, dependiendo del sistema de cada uno...

$ chown www-data:www-data -R . # apache corre como usuario www-data
$ sudo vigr # modificamos la linea de www-data, si teníamos algo como esto:
www-data:x:33:
la modificamos a algo como esto:
www-data:x:33:blaxter

Ahora, ya para finalizar, solo nos queda modificar el .htaccess, concretamente ~/dev/rails/public/.htaccess, que debe quedar así:

Options +FollowSymLinks +ExecCGI
RewriteEngine On
#####################################
# Si configuramos la aplicacion con un Directory mas un alias tipo
# Alias /rails /home/blaxter/dev/rails/public
# Deberíamos descomentar la siguiente linea
# RewriteBase /rails
#####################################
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

ErrorDocument 500 "Application error. Rails application failed to start properly"

Ok, todo hecho. Ya solo queda entrar a http://rails/ o http://rails/adminDeCosas o http://rails/prueba y todo funcionará!. Además podremos ver el log en ~/dev/rails/log/apache.log :). Suerte!

1 Comentario »

RSS feed para los comentarios de esta entrada.

  1. avatar

    Veo que te has tomado en serio lo de Ruby (yo lo tengo a medias) xD

    Algún día me hará falta esto, gracias ;)

     

    Comentario por DraXus — 19 Julio, 2006 @ 23:35 #

Dejar un comentario

XHTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Creative Commons License Esta obra está bajo una licencia de Creative Commons.

Este blog funciona gracias a WordPress con el theme GimpStyle diseñado por Horacio Bella y adaptado por un servidor.
Feed entradas