Breve explicación: rbenv funciona conectándose a su entorno PATH. El concepto es simple, pero el diablo está en los detalles; cucharada completa a continuación.
En primer lugar, crea rbenv cuñas para todos los comandos ( ruby, irb, rake, gemetc.) a través de todas sus versiones instaladas de Ruby. Este proceso se llama rehashing . Cada vez que instale una nueva versión de Ruby o instale una gema que proporcione un comando, ejecute rbenv rehashpara asegurarse de que los comandos nuevos se bloqueen.
Estas cuñas viven en un solo directorio ( ~/.rbenv/shimspor defecto). Para usar rbenv, solo necesita agregar el directorio de cuñas al frente de su PATH:
export PATH="$HOME/.rbenv/shims:$PATH"
Luego, cada vez que ejecute rubydesde la línea de comandos, o ejecute un script cuyo shebang lea #!/usr/bin/env ruby, su sistema operativo lo encontrará ~/.rbenv/shims/rubyprimero y lo ejecutará en lugar de cualquier otro rubyejecutable que haya instalado.
Cada cuña es un pequeño script Bash que a su vez se ejecuta rbenv exec. Entonces, con rbenv en su camino, irbes equivalente a rbenv exec irb, y ruby -e "puts 42"es equivalente a rbenv exec ruby -e "puts 42".
El rbenv execcomando determina qué versión de Ruby desea usar, luego ejecuta el comando correspondiente para esa versión. Así es cómo:
- Si se establece la
RBENV_VERSIONvariable de entorno, su valor determina la versión de Ruby que se utilizará.
- Si el directorio de trabajo actual tiene un
.rbenv-versionarchivo, su contenido se usa para establecer la RBENV_VERSIONvariable de entorno.
- Si no hay ningún
.rbenv-versionarchivo en el directorio actual, rbenv busca en cada directorio padre un .rbenv-versionarchivo hasta que llegue a la raíz de su sistema de archivos. Si se encuentra uno, su contenido se utiliza para establecer la RBENV_VERSIONvariable de entorno.
- Si
RBENV_VERSIONaún no está configurado, rbenv intenta configurarlo utilizando el contenido del ~/.rbenv/versionarchivo.
- Si no se especifica ninguna versión en ninguna parte, rbenv supone que desea utilizar el "sistema" de Ruby, es decir, cualquier versión que se ejecute si rbenv no estuviera en su camino.
(Puede establecer una versión de Ruby específica del proyecto con el rbenv localcomando, que crea un .rbenv-versionarchivo en el directorio actual. Del mismo modo, el rbenv globalcomando modifica el ~/.rbenv/versionarchivo).
Armado con una RBENV_VERSIONvariable de entorno, rbenv se agrega ~/.rbenv/versions/$RBENV_VERSION/binal frente de su PATH, luego ejecuta el comando y los argumentos pasados rbenv exec. Voila!
Para una mirada completa a lo que sucede exactamente debajo del capó, intente configurar RBENV_DEBUG=1y ejecutar un comando Ruby. Cada comando Bash que rbenv ejecuta se escribirá en su terminal.
Ahora, rbenv solo se preocupa por cambiar las versiones, pero un próspero ecosistema de complementos lo ayudará a hacer todo, desde instalar Ruby hasta configurar su entorno , administrar "gemas" e incluso automatizarbundle exec .
No estoy muy seguro de qué tiene que ver el soporte de IRC con el cambio de versiones de Ruby, y rbenv está diseñado para ser simple y lo suficientemente comprensible como para no requerir soporte. Pero si alguna vez necesita ayuda, el rastreador de problemas y Twitter están a solo un par de clics de distancia.
Divulgación: soy el autor de rbenv, ruby-build y rbenv-vars.