arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Trabajando con gemsets en Ruby con RVM

Uriel Hernández

CTO de Código Facilito

av_timer 4 Min. de lectura

remove_red_eye 9279 visitas

calendar_today 14 Mayo 2019

Sin importar cuál sea tu ambiente de trabajo, si es Ruby on RoR, si es NodeJS, o cualquier otro lenguaje, es recomendable aprender a usar un manejador de versiones, por lo regular los hay para cada lenguaje.

Un manejador de versiones te permite instalar una tecnología, actualizarla, cambiar la versión y sobre todo, te permite manejar distintas versiones en tu misma computadora. Este último punto es especialmente importante si en tu misma computadora desarrollas múltiples proyectos, ya que, con un manejador de versiones, puedes precisamente usar una versión distinta de tu herramienta de trabajo para cada proyecto, si así es requerido.

En CódigoFacilito, por ejemplo, trabajamos para la plataforma que estás usando para ver este artículo y todos nuestros cursos, misma que usa ruby 6.0 y Rails 5.1, mientras que en paralelo trabajamos en un proyecto para el manejo de nuestros eventos locales donde usamos ruby 5.2 y rails 5.0, sin un manejador de versiones, sería prácticamente imposible saltar entre ambos proyectos.

En este tutorial trabajamos con Ruby y Ruby on Rails, si aún no conoces estas tecnologías y quieres aprender, puedes seguir nuestros cursos gratuitos de Ruby y Ruby on Rails

En Ruby tenemos dos populares manejadores de versiones RVM y rbenv, en Node existe NVM, para Go podrías usar gvm, JAVA tiene jENV y así cada lenguaje tiene su propio manejador de versiones.

Para destacar lo práctico que es usar un manejador de versiones (usando RVM como ejemplo), cambiar versiones es tan fácil como:

rvm use 2.6.0 #Cambia a ruby 2.6.0 
rvm use 2.5.2 #Cambia a ruby 2.5.2

Este mismo manejador de versiones facilita la actualización de nuestra herramienta, instalar la última versión de Ruby en una computadora con RVM es tan fácil como ejecutar el siguiente comando:

rvm install ruby --latest

Estas herramientas facilitan muchísimo tu flujo de trabajo, por lo que te recomiendo ampliamente utilizar alguna. Si deseas aprender a instalar RVM, con anterioridad realice un vídeo con los pasos para la instalación:

Gemsets en RVM

Luego de la breve introducción acerca de RVM, quisiera introducir un nuevo concepto, los Gemsets.

Un Gemset es una colección de gemas, que puedes administrar a través de RVM. RVM te permite crear estos paquetes de gemas, eliminarlos, pero sobre todo, moverte a través de ellos. Si has trabajado con Node y NPM antes, piensa en los gemsets como carpetas de node_modules donde se guardan las dependencias de cada proyecto, la diferencia es que con bundler, el manejador de dependencias de Ruby, estas librerías se instalan en una carpeta global, y si quieres separarlas entre sí, tienes que hacerlo manualmente.

Este enfoque de una carpeta global para las librerías tiene ventajas al de una carpeta de librerías por proyecto, principalmente, que si dos proyectos distintos usan una misma librería, no tienes que instalarla dos veces, ambos proyectos pueden hacer referencia a la carpeta global con las librerías, lo que reduce considerablemente el espacio en disco duro que usa cada proyecto.

Imagen con un chiste de lo pesadas que son las carpetas de node_modules

La desventaja del enfoque de carpeta global, es que si dos proyectos distintos, usan una versión distinta de una misma librería, puedes terminar encontrándote con problemas, a final de cuentas, todos los proyectos sin importar qué tan viejos o nuevos son, terminan haciendo referencia a la misma carpeta global.

Manejando gemsets

Como mencioné al inicio del artículo, RVM te permite tener instaladas múltiples versiones de Ruby, este es tu primer acercamiento a los paquetes de gemas separados, ya que cada versión de Ruby instalada en tu computadora tendrá su propia carpeta global para las gemas que se instalen en dicha versión.

Captura de pantalla de mi terminal con las distintas carpetas para cada gemset

Aunque en muchos casos, y sin saber de la existencia de gemsets, manejar gemas separadas por versión de Ruby es suficiente, eventualmente puedes necesitar crear tus propios gemsets, por ejemplo, si tienes dos proyectos distintos de Rails, con versiones diferentes, usando la misma versión de Ruby, puede que te topes con conflictos de versiones entre ellos.

Tal caso me sucedió recientemente al hacer el curso de Introducción a Ruby on Rails, en el curso usamos la versión 6.0.0.rc1 con Ruby 2.6.0, esta es la misma versión de Ruby que uso para el proyecto de CódigoFacilito que usa la versión de Rails 5.1.7. Para evitar conflictuar ambos proyectos, decidí que era mejor crear un gemset separado.

Para crear un nuevo gemset, es decir un espacio separado de dependencias en Ruby, puedes usar el siguiente comando:

rvm gemset create curso-rails

curso-rails es el nombre del gemset, es arbitrario y puedes usar el nombre que quieras para identificar tu gemset.

Para moverte a dicho gemset, puedes usar el siguiente comando:

rvm gemset use curso-rails

También puedes moverte a una versión de Ruby y a un gemset en específico usando un mismo comando:

rvm gemset use 2.6.0curso-rails # Usará Ruby 2.6.0 con el gemset curso-rails

Si terminaste de usar un proyecto para el que creaste un gemset específico, quizás quieras desinstalar todas las gemas del gemset para liberar algo de espacio en tu computadora, puedes borrar todo un gemset así:

rvm gemset empty curso-rails

Conclusión

Estos son los fundamentos del manejor de entornos separados para tus librerías en proyectos de Ruby on Rails.

Con lo aprendido en este tutorial, podrás:

  • Instalar múltiples versiones de Ruby
  • Cambiar entre versiones de Ruby en tu misma computadora
  • Instalar la versión de Ruby más actual
  • Crear gemsets separados para distintos proyectos
  • Cambiar entre gemsets
  • Eliminar gemsets

Estas habilidades te permitirán mantener tu computadora mejor organizada cuando trabajas con múltiples proyectos.