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
- Post de Brian Cardarella al respecto de esta solución
- Resumen de los comandos RVM para gestionar gemsets
- Railscast acerca de Rails 3.1, que me llevó a empezar a investigar un poco el funcionamiento de los gemsets y demás (aquí los usa para poder instalar la versión EDGE de Rails 3.1 sin riesgo para su entorno de desarrollo).
No hay comentarios:
Publicar un comentario