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
, gem
etc.) 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 rehash
para asegurarse de que los comandos nuevos se bloqueen.
Estas cuñas viven en un solo directorio ( ~/.rbenv/shims
por 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 ruby
desde la línea de comandos, o ejecute un script cuyo shebang lea #!/usr/bin/env ruby
, su sistema operativo lo encontrará ~/.rbenv/shims/ruby
primero y lo ejecutará en lugar de cualquier otro ruby
ejecutable 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, irb
es equivalente a rbenv exec irb
, y ruby -e "puts 42"
es equivalente a rbenv exec ruby -e "puts 42"
.
El rbenv exec
comando 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_VERSION
variable de entorno, su valor determina la versión de Ruby que se utilizará.
- Si el directorio de trabajo actual tiene un
.rbenv-version
archivo, su contenido se usa para establecer la RBENV_VERSION
variable de entorno.
- Si no hay ningún
.rbenv-version
archivo en el directorio actual, rbenv busca en cada directorio padre un .rbenv-version
archivo hasta que llegue a la raíz de su sistema de archivos. Si se encuentra uno, su contenido se utiliza para establecer la RBENV_VERSION
variable de entorno.
- Si
RBENV_VERSION
aún no está configurado, rbenv intenta configurarlo utilizando el contenido del ~/.rbenv/version
archivo.
- 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 local
comando, que crea un .rbenv-version
archivo en el directorio actual. Del mismo modo, el rbenv global
comando modifica el ~/.rbenv/version
archivo).
Armado con una RBENV_VERSION
variable de entorno, rbenv se agrega ~/.rbenv/versions/$RBENV_VERSION/bin
al 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=1
y 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.