Ruby Enterprise y ruby-ldap en Ubuntu Jaunty

Actualmente estamos comenzando un proyecto que consta de unos ajustes a una aplicación en Rails que utiliza una versión vieja de este framework (1.2.3) y por razones de tiempo y costo, no es posible realizar una actualización a una versión mas nueva (2.x).

En mi caso, por ser un desarrollador con Ruby y con Rails, no puedo darme el lujo de hacer un downgrade total a versiones viejas, incluso, Rails 1.2.3 no es compatible con los últimos patchlevel (actualizaciones varias y de seguridad) de Ruby 1.8.6 ni con Ruby 1.8.7 (ni pensar Ruby 1.9). Mi laptop actualmente tiene Ubuntu Jaunty (9.04), por lo que Ruby es de la serie 1.8.7.

Mi solución fue instalar Ruby Enterprise de Phusion, y mantener una instalación paralela en /opt. Pero una de las extensiones que necesitaba instalar era ruby-ldap, que para hacer las cosas más interesantes, la compilación fallaba, las razones se explican aquí.

Para resumir, la versión de libldap2 incluida en Ubuntu Jaunty no es compatible con ruby-ldap 0.9.7 ni con el último ruby-ldap 0.9.8, por lo que la solución era descargar una versión anterior de las librerías de OpenLDAP (la estable del 2008) y compilar ruby-ldap contra estas librerías.

Para agregarle mas interés a todo el embrollo, resulta que la compilación de openldap-2.4.11 (la estable del 2008), también generaba error, ¿la razón?, básicamente, esa versión de OpenLDAP no compila con GCC 4.3. Gracias a la gente de mi antigua y aún muy querida favorita distribución Gentoo, pude compilar las librerías de OpenLDAP gracias a un patch suministrado por ellos, descargable aquí.

Instalación

A continuación los pasos de esta mini-odisea para dejar documentada la solución, tanto para mí como para la comunidad.

El primer paso es instalar Ruby Enterprise (pero primero unas dependencias, que el mismo instalador de Ruby Enterprise solicitará si no se encuentran instaladas)

sudo aptitude install libssl-dev libreadline5-dev

Luego, descomprimir el tarball de Ruby Enterprise e instalar (seguir instrucciones del instalador de línea de comando):

tar xzvf ruby-enterprise-1.8.6-20090520.tar.gz
cd ruby-enterprise-1.8.6-20090520/
sudo ./installer

Ruby Enterprise es instalado por defecto en /opt, para facilitar el acceso a los ejecutables, realizaremos enlaces simbólicos a /usr/bin:

sudo ln -s /opt/ruby-enterprise-1.8.6-20090520/bin/ruby  /usr/bin/rubye
sudo ln -s /opt/ruby-enterprise-1.8.6-20090520/bin/gem  /usr/bin/geme
sudo ln -s /opt/ruby-enterprise-1.8.6-20090520/bin/irb  /usr/bin/irbe

Nótese que los symlinks se llaman igual, pero finalizan con "e" de Enterprise. Por lo tanto para utilizar Ruby Enterprise, desde la línea de comando sólo debemos utilizar rubye, y para instalar gemas utilizamos geme.

Antes de compilar la extensión ruby-ldap, instalar las librerías de OpenLDAP, en este caso utilizaremos como destino /opt/openldap, para evitar conflictos con las librerías existentes en el sistema (Nota: reemplazar openldap_patch.diff por el nombre asignado al momento de descargar el Patch OpenLDAP para GCC 4.3 o superior):

tar xzvf openldap-stable-20080813.tgz 
cp openldap_patch.diff openldap-2.4.11/
cd openldap-2.4.11/
patch -p1 < openldap_patch.diff 
./configure --prefix=/opt/openldap --enable-slapd=no
make depend
make 
sudo make install

Ahora se procede a instalar ruby-ldap 0.9.7, descomprimir el tarball e instalar, indicando las librerías de ldap en /opt/openldap:

tar xzvf libldap-ruby_0.9.7.orig.tar.gz
cd ruby-ldap-0.9.7/
rubye extconf.rb --with-ldap-dir=/opt/openldap
make
sudo make install

Nótese el uso de rubye para la configuración de la extensión.

Instalar las gemas necesarias (nótese el uso de geme y no gem):

sudo geme install rails -v x.x.x
# ...

Adicionalmente, para facilitar el acceso al rake de la instalación de Ruby Enterprise, creé un enlace simbólico a /usr/bin (igual que con rubye, irbe y geme):

sudo ln -s /opt/ruby-enterprise-1.8.6-20090520/bin/rake  /usr/bin/rakee

Como observación, los scripts de línea de comando de Rails (por ejemplo, script/server), deben invocarse con rubye -S. Ejemplo:

## Iniciar el servidor local de desarrollo
rubye -S script/server

## Iniciar la cónsola de la aplicación
rubye -S script/console --irb=irbe

## Las Tareas rake debe utilizar rakee
rakee db:migrate 

Saludos!

Escribir un comentario

Sobre COTECSO

Somos un equipo pragmático, desarrollamos software de manera ágil y elegante, nos gusta la tecnología, la simplicidad y las cosas bien hechas.

Entradas recientes

  • ¿Por qué utilizar un iPhone en vez de un BlackBerry o lo que sea?

    Aquí en Venezuela, muchas cosas son modismos. La gente compra lo que los demás compran. La mayoría no se pregunta si es lo mejor (para...

  • The Passionate Programmer: Impresiones

    Actualmente estoy leyendo el nuevo libro de [Chad Fowler](http://chadfowler.com/), [The Passionate Programmer](http://www.pragprog.com/titles/cfcar2/the-passionate-programmer), me llegó hace poco desde [Amazon](http://www.amazon.com). ¿Cómo dí con este libro? Bueno,...

  • Ruby Enterprise y ruby-ldap en Ubuntu Jaunty

    Actualmente estamos comenzando un proyecto que consta de unos ajustes a una aplicación en [Rails](http://rubyonrails.org) que utiliza una versión vieja de este framework (1.2.3) y...

  • Rails + iPhone (FLISOL Paraguaná 2009) - Parte 2

    Esta es la segunda parte de una serie de 3 artículos sobre la presentación que realicé en el [FLISOL Paraguaná 2009](http://blog.cotecso.com.ve/2009/05/finalizado-flisol-paraguana-2009-con-exito.html). En la [primera parte](http://blog.cotecso.com.ve/2009/05/rails-iphone-flisol-paraguana-2009---parte-1.html),...

  • Plugin rails_jqtouch: Integrando jQTouch y Rails

    Hace un par de semanas, publiqué en [mi github](http://github.com/rrodrigu3z), un plugin de [Rails](http://www.rubyonrails.org) llamado [rails_jqtouch](http://github.com/rrodrigu3z/rails_jqtouch/tree/master) para facilitar el uso de [jQTouch](http://www.jqtouch.com) con Rails. jQTouch...

Cerrar