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.
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.
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.