Ayer decidí actualizar a Passenger 2.0.5 y migrar una aplicación a Rails 2.2.2. Una vez echo todo el proceso, revisado en local etc. me dispongo a subirlo al servidor de desarrollo, el Apache arranca perfecto y sin problemas.

Cuando entro cargo la url del sitio me encuentro el siguiente problema que me lanza el Passenger, eso si, de forma muy bonita:

“No such file or directory - /nonexistent” - Errno::ENOENT

Después de revisar gemas, plugins y volverme un poco tarumba me entere de dos cosas:

  1. Que el Mod_Rails se pasa por el forro el RAILS_EN del enviroment.rb
  2. Que toma por defecto el entorno de producción

Solución…. Muy fácil en la definición del Virtual Host agregamos la directiva RailsEnv development.

Otro aspecto a tener en cuenta con este error es una linea que viene en el production.rb

1
config.action_view.perform_caching = true

que al parecer en la versión 2.2.2 de Rails ya no se usa y casca la falla el Passenger a la hora de cargar la página. con que debemos de borrar esta linea del fichero.

Otro problema común que haga saltar este error es la posible falta de algún tipo de directorio como el tmp o el log, ya que me paso con la 2.0.1 del Passenger.

Si alguien tiene más experiencias con este error que las comente para hacer una recopilación.

,

La versión se Phusion Passenger 2.0.4 (aka mod_rails) ya está lista y disponible como gema para su actualización.

1
sudo gem update passenger

Para terminar la actualización debemos modificar la ruta que tenemos colocada en el fichero de configuración del Apache sustituyéndola por el número de versión quedando lo siguiente:

1
2
3
LoadModule passenger_module /usr/lib/ruby/gems/1.8/passenger-2.0.4/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/passenger-2.0.4
PassengerRuby /usr/lib/ruby1.8

Otro de los frutos de este proyecto es que la gente de 37signals ha usado esta última versión de mod_rails para su aplicación Ta-Da List, lo que nos puede dar una día de lo estable que esta siendo la fusión Apache2 + mod_rails.

,

Por unos temas de un proyectillo tenía la necesidad de instalar tomcat en mi server de desarrollo, como no me apetecía tenerlo en un puerto aparte (siendo un poco purista es la manera cutre de meterlo si ya tienes un Apache) decí meterlo como un VirtualHost con los otros de Rails que tengo.

Al principio andaba un poco perdido de como configurar/tratar el tema por que no sabía muy bien que derroteros tomaría cada llamada, de echo en la primera prueba, todas las llamadas al Tomcat se las comía la aplicación que tengo de default en Rails, pero ahora ya esta todo ok :)

Voy a centrarme en la preparación de los ficheros de configuración, ya que la instalación tanto de Passenger como del ModJK se hace a golpe de apt-get y gemas.

Fichero httpd.conf

NameVirtualHost *

# Passenger mod rails module
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2
PassengerRuby /usr/bin/ruby1.8

Fichero /etc/libapache2-mod-jk/workers.properties

#Directorio del tomcat
workers.tomcat_home=/usr/share/tomcat5

#Directorio de la SDK de Java
workers.java_home=/usr/lib/jdk
ps=/

#Worker List
worker.list=worker1

#DEfinicion de WORKER1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13

worker.worker1.lbfactor=50

# Specify the size of the open connection cache.
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.recycle_timeout=300

#—— DEFAULT LOAD BALANCER WORKER DEFINITION ———————-
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1

Y ahora solo nos queda configurar los VHost, una aplicación en rails y otra que tire de tomcat, que en este caso montare el directorio Webapps como ejemplo.

Fichero app.rails

1
2
3
4
<VirtualHost *>
	ServerName apprails.pabloformoso.com
	DocumentRoot /var/www/app_rails/public
</VirtualHost>

Facil no… on the Rails Way jejejej. Vamos Ahora con el de Tomcat

Fichero app.tomcat

1
2
3
4
5
6
7
8
<VirtualHost *>
	ServerName tomcatapp.pabloformoso.com
 
	<IfModule mod_jk.c>
		Alias / /usr/share/tomcat5.5/webapps/
		JkMount /* worker1
	</IfModule>
</VirtualHost>

Y todo listo… si alguien tiene dudas sobre la instalación o configuración que lo apunte en comentarios y haré un post para complementar este :)

Saludos!!!

, , ,