Gestión de versiones de Ruby con rvm

1
12209

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:

$ curl -sSL https://get.rvm.io | bash -s stable

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:

$ rvm install

Puedes ver las versiones disponibles de ruby con:

$ rvm list known

Para saber qué versiones de Ruby tienes instaladas:

$ rvm list

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

$ rvm use ruby-2.4.4

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

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

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:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

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:

$ rvm gemset create project1

Para usar un conjunto de gemas específico:

$ rvm gemset use project1

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:

$ gem install bundler

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

$ bundle

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:

$ cd ruby_project_1 rvm use rvm gemset use

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

# file: .ruby-version  
ruby-2.5.1
# file: .ruby-gemset  
gemset-project

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í:

# Instalar la versión de ruby que queremos para el nuevo proyecto  
$ rvm install ruby-2.5.1

# Ir al directorio de tu proyecto de ruby  
$ cd project

# Crear el gemset para este proyecto  
$ rvm ruby-2.5.1 do rvm gemset create gemset-project

# Crear el fichero .ruby-gemset  
$ echo "gemset-project" >> .ruby-gemset

# Crear el fichero .ruby-version  
$ echo "ruby-2.5.1" >> .ruby-version

# Volver a entrar al proyecto para que se apliquen los cambios  
$ cd ../  
$ cd project

# Crear tu Gemfile con las dependencias del proyecto

# Instalar las dependencias de tus gemas  
$ bundle

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

# Ir al directorio de tu proyecto de ruby  
$ cd project

# Instalar las dependencias del mismo  
$ bundle  

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:

# Este comando requiere confirmación interativa  
$ rvm implode

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

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad