Una Comparación de Administradores de Versiones de Ruby para macOS

En este artículo, compararé los gestores de versiones más populares para Ruby en una Mac: Chruby, Rbenv y RVM, así como Asdf, un gestor de versiones para múltiples lenguajes, y Frum, un nuevo gestor de versiones escrito en Rust. Haré recomendaciones basadas en lo que más probablemente necesites.

El Ruby preinstalado no es para desarrolladores

Las personas nuevas en Ruby se alegran al descubrir que Ruby viene preinstalado en macOS. A menudo se decepcionan cuando un desarrollador más experimentado les dice: “No uses el Ruby del sistema Mac”. He escrito en otro lugar sobre los motivos. En resumen, el Ruby del sistema está ahí para macOS, no para ti. Está bien para ejecutar scripts de utilidad, pero para el desarrollo, el Ruby del sistema está desactualizado y, si no tienes cuidado, la instalación de gemas puede llevar a dolores de cabeza (incluyendo violaciones de seguridad del sistema).

El problema de un solo Ruby de Homebrew

Homebrew es el gestor de paquetes que se ha convertido en un estándar casi universal para agregar software de desarrollo a macOS. Homebrew facilita la instalación de una nueva versión de Ruby para evitar depender del Ruby del sistema. Pero hay dos problemas con Homebrew. Primero, la versión de Ruby de Homebrew puede ser reemplazada automática e inesperadamente por una versión más nueva cuando se instalan otros paquetes de Homebrew (un problema resuelto por brew pin ruby). Más importante aún, Homebrew solo te permite instalar una versión de Ruby. Si estás desarrollando o manteniendo más de un proyecto en Ruby, probablemente necesites cambiar entre versiones de Ruby. Ahí es donde necesitarás un gestor de versiones.

Asdf para múltiples idiomas

Asdf es un administrador de versiones que admite múltiples lenguajes. Si estás utilizando Ruby para desarrollar aplicaciones web con Rails 6, necesitarás instalar Node y Yarn para crear una aplicación inicial de Rails. (Rails 7 podría eliminar la necesidad de Node, pero eso aún no está seguro en este momento.)

Entonces, para un desarrollador de Rails, Asdf es un administrador de versiones ideal. También te servirá bien si desarrollas aplicaciones en Python, Elixir u otros muchos lenguajes (vea una lista de idiomas soportados). ¿Hay alguna desventaja al usar Asdf? Solo dos. Utiliza shims para interceptar comandos comunes, lo que puede dificultar la solución de problemas. Además, puede ser un poco lento para algunas operaciones. Si estás desarrollando en varios idiomas, te recomiendo que pruebes Asdf para ver si te gusta. Cambia a Frum, el administrador de versiones de Ruby solo escrito en Rust, si encuentras que Asdf te ralentiza.

Administradores de versiones de Ruby solo

Si solo planeas desarrollar aplicaciones utilizando Ruby, elige entre los cuatro administradores de versiones de Ruby solo: Chruby, Frum, Rbenv y RVM. Las diferencias entre los cuatro radican en velocidad, complejidad y cómo cada uno cambia las versiones de Ruby. Veamos primero el más antiguo: RVM.

RVM

RVM fue el primer administrador de versiones popular para Ruby. Aún está mantenido y se utiliza ampliamente. RVM modifica el comando del sistema cd para establecer variables de entorno cuando cambias de directorio. Para anular el comando cd, el script de instalación de RVM cambia el archivo de configuración de shell (el archivo ~/.zshrc en Macs más nuevos).

RVM muestra correctamente las variables de entorno para revelar la versión de Ruby y la ubicación de los gems, lo que puede ayudar a diagnosticar problemas. Sin embargo, RVM incluye características adicionales como los gemsets. Los gemsets ya no son necesarios, ya que Bundler se agregó al núcleo de Ruby para gestionar las dependencias de los gems. La complejidad adicional no es necesaria, por lo que muchos desarrolladores han cambiado a un administrador de versiones más nuevo como Rbenv, Chruby o Frum.

Rbenv

Junto con RVM, Rbenv ha sido durante mucho tiempo el administrador de versiones más popular para Ruby. Rbenv utiliza shims para interceptar comandos comunes de Ruby. (Asdf también utiliza shims.)

Después de instalar Rbenv con Homebrew, debes modificar tu archivo ~/.zshrc para que los shims de Rbenv tengan prioridad sobre los comandos de Ruby ordinarios. El shim llama al comando rbenv exec, que determina qué versión de Ruby utilizar antes de ejecutar cualquier comando de Ruby.

Las arandelas tienen dos desventajas. Primero, las arandelas dificultan la solución de problemas al ocultar el comando real. Por ejemplo, el comando which ruby muestra la arandela de Rbenv, no la versión real de Ruby (debes establecer la variable de entorno RBENV_DEBUG si deseas ver el comando real de Ruby). Segundo, una arandela puede agregar microsegundos de demora a la ejecución de un comando de Ruby. (Rbenv interviene cada vez que ejecuto un comando de Ruby, a diferencia de RVM, que solo interviene cuando cambias de directorio). Para los desarrolladores que notan la demora, o no les gusta la idea de las arandelas, existe Chruby o Frum.

Chruby

Chruby no es tan conocido como RVM o Rbenv, pero es promovido por varios desarrolladores de Ruby prominentes. A diferencia de RVM, no sobreescribe el comando cd. A diferencia de Rbenv o Asdf, no intercepta comandos utilizando arandelas. Necesitarás modificar tu archivo ~/.zshrc para que Chruby se ejecute en tu entorno local de shell. No es necesario modificar tu $PATH, ya que Chruby lo hace por ti, según la versión de Ruby que hayas seleccionado.

Chruby también establece ciertas variables de entorno para Ruby. Eso es todo lo que se necesita para que Chruby cambie entre versiones de Ruby. Funciona bien para solucionar problemas con which. Usé Chruby durante varios años y no tuve problemas con él. Chruby es una excelente opción, pero es posible que desees probar Frum, el administrador de versiones de Ruby más nuevo.

Frum

Frum está escrito en Rust, un lenguaje excelente para la ejecución rápida de software de sistema en la línea de comandos. Frum es nuevo (lanzado a principios de 2021). A diferencia de Asdf, Chruby o Rbenv, incluye un comando de instalador de Ruby incorporado, por lo que no se necesita un programa adicional para instalar Ruby. El instalador es rápido y Frum no requiere dependencias (es un ejecutable Rust todo en uno que puedes instalar con Homebrew).

Después de instalar Frum, debes modificar tu archivo ~/.zshrc para que Frum se ejecute en tu entorno de shell local. Al igual que los otros gestores de versiones, verifica la existencia de un archivo .ruby-version en el directorio del proyecto y, si no se especifica una versión para un proyecto,默认为 una versión global de Ruby. No hay shims (a diferencia de Asdf o Rbenv) y no sobrescribe el comando cd (a diferencia de RVM). Aunque es nuevo, lo recomiendo porque es todo en uno y rápido.

Instalar un Gestor de Versiones para Ruby

I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:

Si deseas explorar RVM o Rbenv, consulta:

A Note about Docker

Si mencionas administradores de versiones de Ruby, probablemente alguien diga: “Yo uso Docker”. Docker es una herramienta de contenerización que algunos desarrolladores utilizan para la gestión de versiones. El caso de uso principal de Docker es crear un servidor virtual reproducible que contenga una versión configurada de cualquier dependencia de software necesaria para ejecutar una aplicación (lenguaje, bases de datos, colas de mensajes). Como tal, es ideal para crear una versión “congelada” de un entorno de desarrollo para su despliegue en un servidor.

También puedes desarrollar localmente dentro de un contenedor, pero funcionará más lento, requerirá más memoria y agregará complejidad de configuración en comparación con un administrador de versiones. Para mantener las cosas simples, evito Docker para el desarrollo local a menos que una aplicación sea terriblemente compleja.

Conclusión

No eres solo un usuario casual de Ruby si trabajas en múltiples proyectos en Ruby. Asegúrate de instalar un gran administrador de versiones en tu entorno de desarrollo local.

I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.

Preguntas Frecuentes (FAQs) sobre Administradores de Versiones de Ruby para MacOS

¿Cuáles son las principales diferencias entre RVM y rbenv?

RVM (Ruby Version Manager) y rbenv son herramientas para administrar múltiples versiones de Ruby en tu sistema. La diferencia clave radica en su enfoque. RVM es más completo y te permite administrar gemsets: un conjunto de gemas que se utilizan para una aplicación Ruby específica. Por otro lado, rbenv es más simple y se enfoca únicamente en cambiar las versiones de Ruby. No admite gemsets, pero puedes lograr una funcionalidad similar utilizando un plugin llamado ruby-build.

¿Cómo instalo una versión específica de Ruby usando RVM?

Para instalar una versión específica de Ruby usando RVM, puedes utilizar el comando ‘rvm install’ seguido del número de versión. Por ejemplo, para instalar Ruby 2.6.3, usarías el comando ‘rvm install 2.6.3’. Una vez instalada, puedes cambiar a esta versión usando el comando ‘rvm use’, como ‘rvm use 2.6.3’.

¿Puedo usar tanto RVM como rbenv en el mismo sistema?

Aunque técnicamente es posible tener tanto RVM como rbenv instalados en el mismo sistema, generalmente no se recomienda. Ambas herramientas modifican tu entorno de shell y tener ambas puede llevar a comportamientos inesperados. Es mejor elegir una según tus necesidades y quedarte con ella.

¿Cómo desinstalo una versión de Ruby usando rbenv?

Para desinstalar una versión de Ruby usando rbenv, puedes usar el comando ‘rbenv uninstall’ seguido del número de versión. Por ejemplo, para desinstalar Ruby 2.6.3, usarías el comando ‘rbenv uninstall 2.6.3’.

¿Cómo establezco una versión de Ruby predeterminada con RVM?

Para establecer una versión predeterminada de Ruby con RVM, puedes usar el comando ‘rvm –default use’ seguido del número de versión. Por ejemplo, para establecer Ruby 2.6.3 como predeterminada, usarías el comando ‘rvm –default use 2.6.3’.

¿Cómo actualizo rbenv y sus complementos?

Para actualizar rbenv y sus complementos, puedes usar git. Navega al directorio de rbenv en tu terminal (generalmente ‘~/.rbenv’) y ejecuta ‘git pull’. Luego, navega a cada directorio de complemento y haz lo mismo.

¿Puedo usar RVM o rbenv con otros lenguajes de programación?

RVM y rbenv están diseñados específicamente para gestionar versiones de Ruby. Si necesitas gestionar versiones de otros lenguajes de programación, podrías querer mirar en herramientas como pyenv para Python o nvm para Node.js.

¿Cómo listo todas las versiones de Ruby instaladas con rbenv?

Para listar todas las versiones de Ruby instaladas con rbenv, puedes usar el comando ‘rbenv versions’. Esto mostrará una lista de todas las versiones de Ruby que rbenv puede utilizar.

¿Cómo manejo las dependencias de gem con RVM?

RVM te permite gestionar las dependencias de gem mediante el uso de gemsets. Puedes crear un gemset con el comando ‘rvm gemset create’, cambiar a él con el comando ‘rvm gemset use’, y luego instalar las gemas según sea necesario.

¿Cómo instalo una nueva versión de Ruby con rbenv?

Para instalar una nueva versión de Ruby con rbenv, puedes usar el comando ‘rbenv install’ seguido del número de versión. Por ejemplo, para instalar Ruby 2.6.3, usarías el comando ‘rbenv install 2.6.3’.

Source:
https://www.sitepoint.com/ruby-version-managers-macos/