domingo, 12 de junio de 2011

Cambio automático de gemsets con RVM

RVM es una herramienta que nos permite fácilmente gestionar distintas versiones de Ruby en el mismo equipo, de forma que podemos trabajar en distintos proyectos que usen distintas versiones de Ruby en nuestra misma máquina sin quebraderos de cabeza.

Además, RVM nos permite definir gemsets.

Los gemsets son conjuntos de gemas que definimos para una versión de Ruby, y que existen (gracias a RVM) aislados unos de otros.
De esta forma, podemos tener al mismo tiempo proyectos que utilicen distintas versiones de una misma gema, cada uno con su correspondiente gemset, sin que se estorben entre ellos.

Es una buena práctica definir un gemset para cada proyecto con el que trabajamos aislando así las instalaciones de gemas que dicho proyecto requiera de las que requieren otros proyectos en nuestra misma máquina (evitando conflictos).

Para crear un gemset para la versión de ruby que tenga configurada RVM en ese momento, hacemos:
$ rvm gemset create NOMBRE_GEMSET

Para utilizar un gemset que exista para la versión de ruby que tenga configurada RVM en ese momento:
$ rvm gemset use NOMBRE_GEMSET

También podemos especificar la versión de ruby y el gemset al que queremos cambiar:
$ rvm gemset use VERSION@NOMBRE_GEMSET

Con esto, conseguimos definir distintos gemsets (como hemos dicho, es buena práctica definir uno por proyecto). Sin embargo, si definimos uno por proyecto, tendremos que cambiar de gemset cada vez que cambiemos de proyecto, lo cual puede ser algo molesto.

Podemos automatizar el cambio de gemset entre proyectos, de nuevo gracias a RVM.

Para hacer esto, primero tenemos que crear un fichero .rvmrc en la raíz de nuestro proyecto. RVM recorre de forma automática la estructura de carpetas hasta que encuentra este fichero, y lo utiliza.
En dicho fichero, basta poner la versión de ruby y el gemset al que queremos cambiar para que RVM cambie automáticamente a dicho gemset cuando entremos en la carpeta del proyecto.

Contenido de .rvmrc:
rvm --create use default@NOMBRE_PROYECTO > /dev/null

Con esto conseguimos:
  • Utilizar automáticamente el gemset NOMBRE_PROYECTO definido para la versión default de ruby que RVM tenga configurada en dicha máquina.
  • Si no existe dicho gemset, lo creará
  • La redirección a /dev/null es cuestión de gustos, para evitar que RVM imprima por pantalla cada vez que cambiemos de directorio


¡Y ya está! Ya tenemos cambio automático de gemset cada vez que nos situemos en la carpeta correspondiente a cada proyecto.
A partir de aquí es cuestión personal el aplicar la práctica de definir un gemset para cada proyecto con el que trabajamos (como ya hemos dicho, es considerado buena práctica).



Enlaces de interés

No hay comentarios:

Publicar un comentario