Archivo de la categoría: rails

MySQL y Rails en Leopard

Como estoy de vacaciones, me ha dado por investigar la plataforma Ruby on Rails, así que lo primero que se me ha ocurrido ha sido actualizar rails a su última versión, que en este momento está por la versión 2.3.2. Para hacer esto simplemente hay que ir a un terminal y escribir:

$ sudo gem update --system
$ sudo gem install rails
$ sudo gem update rake

Tras un rato de espera podemos comprobar si la actualización ha tenido éxito ejecutando

$ rails -v
Rails 2.3.2

Hasta ahí bien, hasta que creamos una aplicación e intentamos configurarla para trabajar con MySQL. En esta versión, Rails ya no integra por defecto el driver de conexión con MySQL, habiéndolo sustituido por una base de datos SQLite. Por tanto debe instalarse mediante gem.
Sin embargo, cuando se intenta instalar, ocurre lo siguiente:

$ sudo gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

...Bla, bla, bla..

El error, tras investigarlo un poco se produce porque Leopard intenta compilar el driver como código universal y MySQL no se distribuye para Leopard de esta manera, sino como un binario para i386 o x64. Por tanto debe compilarse este módulo para la arquitectura que tengamos, que debe coincidir con la del binario de MySQL. Como encima yo tenía MySQL versión de 64 bits he tenido que destruirlo (Como no existe script de desinstalación ni similar, ha sido toda una destrucción en toda regla) para reemplazarlo por la versión de 64 bits. Esto se hace con los siguientes comandos (Cuidado con pulsar intro antes de tiempo con los “sudo rm -rf…”, mejor copiar y pegar directamente los comandos desde aquí):

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
vi /etc/hostconfig # borrar la línea MYSQLCOM=-YES-

Hecho esto ya nos podemos descargar la versión de 32 bits de MySQL e instalarla y compilar por fin nuestro driver de ruby correctamente especificando la arquitectura de la siguiente manera:

sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
--with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
--with-mysql-include=/usr/local/mysql/include

Si todo ha ido bien ya estará todo instalado, id a vuestros database.yml y a programar!