viernes, 26 de septiembre de 2014

Problemas de versiones de gemas en Ruby

Ante todo decir que no soy ni experto en Linux ni en Ruby ni en Redmine, pero tengo algo de experiencia en "pelearme" con los tres.

El caso que pongo me ocurrió al tratar de reparar un plugin en una versión de Redmine que habían actualizado de una muy antigua, y el plugin se había quedado a mitad instalar, aparecía en Redmine como instalado y se podía acceder a la página de configuración, pero a la hora de usarlo daba error de página no encontrada.

Lo primero fue verificar que eefectivamente en la base de datos no aparecían las tablas del plugin, por lo que realmente es como si no estuviese instalado.

Al tratar de lanzar los comandos rake para que terminase la instalación del plugin (después de haber actualizado con el correspondiente bundle update e instalado las gemas que indicaba que faltaban) surgían diversos errores (archivos no encontrado rich/helpers, Failed to build gem native extension, ) y acerca de que no se podía activar la versión 1.5.2 de la gema rack, .... Cada vez que solucionaba un problema aparecía otro, y luego volvía a empezar.

En este caso el problema es que había varias versiones de rake instaladas (se puede ver con el comando gem list) y nuestro proyecto no utilizaba la última versión del rake.

Si ocurre lo anterior puede ocurrir que al lanzar los comandos rake db:migrate de errores de diversos tipos (como los explicados inicialmente) que además no acaban de indicar que el problema está en el rake.

Para evitar esto, podemos intentar utilizar el comando bundle exec justo antes del rake, es decir:

bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

De esta forma, lanzando esots comandos dentro de la carpeta de nuestro proyecto o aplicación,  el bundle exec permitirá que se "escoja" la versión de rake que nos haga falta de las que están instaladas y es muy probable que ya no surjan los errores antes comentados.


No confundir estos errores, con los que a veces devuelve el bundle update o bundle install que indican que faltan gemas o versiones de gemas por instalar en cuyo caso, con instalar esas gemas debería ser suficiente.