Gestión de versiones de Ruby con rvm

1
11001

En este tutorial gestionamos distintas versiones de Ruby, conflictos de gemas por proyecto y replica de la configuración con RVM.

  1. Introducción
  2. Instalación y uso general de rvm
  3. Gestión de versiones de Ruby
  4. Gestión de Gemas por proyecto
  5. Configuración replicable por proyecto
  6. ¿Y cuándo tienes muchos proyectos?
  7. Conclusión
  8. Espera, ¿Y cómo lo desinstalo?
  9. Referencias

1. Introducción

Anteriormente en el tutorial para gestionar las versiones de python comprobamos cómo podemos gestionarlas gracias a pipenv.

Buscando una herramienta que se encargara de:

  • Gestión de las distintas versiones de Ruby que puede tener cada proyecto.
  • Dentro de dos proyectos con la misma versión de Ruby, que las Gemas de cada uno no entren en conflicto.
  • Que la configuración pueda ser replicable para que todos los miembros del proyecto puedan tener el mismo entorno local.
  • Tratar de usar una única herramienta que se encargue de toda la gestión de este tinglao, para facilitar su uso.

La herramienta que cumple con todos estos requisitos se llama rvm. A continuación veremos cómo nos facilita todo este uso.

2. Instalación y uso general de rvm

Instalar rvm es muy sencillo. Aquí tienes cómo se realiza la instalación, además de toda la documentación necesaria por si quieres profundizar en esta herramienta.

Básicamente con este comando ejecutado desde terminal, deberías estar listo para seguir este tutorial:

Esto nos instala la última versión estable de rvm, sin ninguna versión de Ruby específica.

3. Gestión de versiones de Ruby

Gestionar tus versiones de Ruby es tan sencillo como ejecutar el comando:

Puedes ver las versiones disponibles de ruby con:

Para saber qué versiones de Ruby tienes instaladas:

Si quieres usar una versión de Ruby específica (por ejemplo la 2.4.4) se hace con el comando:

Nota: Si te sale el siguiente mensaje cuando intentas utilizar una versión determinada de rvm:

Para arreglarlo de forma permanente puedes añadir la siguiente línea a tu .bash_profile o .zshrc en función de la SHELL que utilices:

Con esto ya tenemos la gestión de diferentes versiones de Ruby de forma sencilla.

4. Gestión de Gemas por proyecto

Ahora necesitamos gestionar las gemas de cada proyecto de forma independiente. Para ello utilizaremos los gemsets de rvm.

rvm te permite crear gemsets de forma que puedes especificarle a la versión de Ruby qué conjunto de gemas quieres utilizar. Asignando un gemset diferente para cada proyecto, tenemos resuelto el problema de conflicto de dependencias.

Para crear un nuevo conjunto de gemas:

Para usar un conjunto de gemas específico:

Fácil, ¿verdad? 😀

Con esto ya podemos crear nuestro conjunto de gemas diferentes por proyecto.

5. Configuración replicable por proyecto

Hasta ahora somos capaces de gestionar la versión de Ruby que queremos de forma sencilla, así como separar las diferentes gemas por proyecto usando los gemsets de rvm, pero ahora necesitamos tener un registro de las gemas que utilizamos por cada proyecto. Para ello tenemos bundler, que nos permite leer de un fichero llamado Gemfile en el que podemos definir nuestras gemas por proyecto y subirlo al repositorio de código, de forma que todos trabajemos con las mismas versiones.

Para ello necesitamos instalar la gema bundler que será la encargada de leer el fichero Gemfile y descargar las dependencias necesarias. Esta será la única gema que instalaremos fuera de los gemsets, para usar la misma sin importar el proyecto.

NOTA: Si tenemos varias versiones de Ruby, deberemos instalar esta gema por cada versión de Ruby para hacerla disponible para todos.

El comando para instalar bundler es:

Una vez instalado, leemos del fichero Gemfile usando el comando:

Para instalar todas las dependencias.

Gracias a Bundler, gestionar y listar las dependencias de nuestras gemas es sencillo, de forma que es fácil asegurarse de que todo el equipo use las mismas versiones en los mismos proyectos.

6. ¿Y cuándo tienes muchos proyectos?

Todo esto está muy bien, pero en cuanto tienes varios proyectos diferentes de ruby, se hace pesado repetir el flujo de:

Ya que tienes que acordarte del nombre que le pusiste al gemset, y de la versión de Ruby que tenía el mismo habilitada.

¿No sería genial que tuviéramos «algo» que al entrar al repositorio en cuestión supiera exactamente qué versión de ruby utiliza y qué gemset tiene asignado? 😀

El fantástico rvm tiene para ello los ficheros __.ruby-version y .ruby-gemset gracias a los cuales al acceder a un proyecto que tenga estos ficheros, te asigna la versión de ruby y el gemset para el mismo. Maravilloso.

Basta con crear estos ficheros en la raíz de tu repositorio con la versión de Ruby y el gemset y listo

7. Conclusión

Vemos como rvm es una herramienta que nos permite gestionar de forma sencilla:

  • Varias versiones de Ruby.
  • Varios conjuntos de gemas diferentes entre ellos.
  • Listado de dependencias por proyecto para que sea replicable entre entornos.
  • Hacer toda la gestión de forma sencilla con el fichero .rvmrc.

De forma que el flujo al trabajar al crear un nuevo projecto de ruby sería así:

Y el flujo al trabajar en un projecto ya creado es:

8. Espera, ¿Y cómo lo desinstalo?

Ah, y si por algún extraño motivo tras llegar hasta este punto ves que rvm no es la herramienta que buscas y quieres asegurarte de eliminar todas las gemas y versiones de ruby que has instalado con el mismo basta con ejecutar:

Y adiós rvm y todas sus versiones, con sus gemsets asociados. Si has tenido que añadir algo en tu __.bash_profile__ o en tu .zshrc elimínalo y estarás como al principio. 😀

9. Referencias

Casi todo el contenido de este tutorial ha sido gracias al siguiente artículo, donde explican los problemas de confictos de gemas en más detalle. No está de más echarle un vistazo.

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here