Brève explication: rbenv fonctionne en se connectant à votre environnement PATH
. Le concept est simple, mais le diable est dans les détails; plein scoop ci-dessous.
Tout d' abord, rbenv crée des cales pour toutes les commandes ( ruby
, irb
, rake
, gem
etc.) à travers toutes vos versions installées de Ruby. Ce processus s'appelle rehashing . Chaque fois que vous installez une nouvelle version de Ruby ou installez une gemme qui fournit une commande, exécutez rbenv rehash
pour vous assurer que toutes les nouvelles commandes sont shimmed.
Ces shims vivent dans un seul répertoire ( ~/.rbenv/shims
par défaut). Pour utiliser rbenv, il vous suffit d'ajouter le répertoire shims au début de votre PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Ensuite, chaque fois que vous exécutez à ruby
partir de la ligne de commande, ou exécutez un script dont shebang lit #!/usr/bin/env ruby
, votre système d'exploitation le trouvera en ~/.rbenv/shims/ruby
premier et l'exécutera à la place de tout autre ruby
exécutable que vous avez peut-être installé.
Chaque shim est un petit script Bash qui s'exécute à son tour rbenv exec
. Donc, avec rbenv dans votre chemin, irb
équivaut à rbenv exec irb
et ruby -e "puts 42"
équivaut à rbenv exec ruby -e "puts 42"
.
La rbenv exec
commande détermine la version de Ruby que vous souhaitez utiliser, puis exécute la commande correspondante pour cette version. Voici comment:
- Si la
RBENV_VERSION
variable d'environnement est définie, sa valeur détermine la version de Ruby à utiliser.
- Si le répertoire de travail actuel contient un
.rbenv-version
fichier, son contenu est utilisé pour définir la RBENV_VERSION
variable d'environnement.
- S'il n'y a pas de
.rbenv-version
fichier dans le répertoire courant, rbenv recherche un .rbenv-version
fichier dans chaque répertoire parent jusqu'à ce qu'il atteigne la racine de votre système de fichiers. S'il en trouve un, son contenu est utilisé pour définir la RBENV_VERSION
variable d'environnement.
- Si
RBENV_VERSION
n'est toujours pas défini, rbenv essaie de le définir en utilisant le contenu du ~/.rbenv/version
fichier.
- Si aucune version n'est spécifiée nulle part, rbenv suppose que vous voulez utiliser le Ruby "système" - c'est-à-dire quelle que soit la version exécutée si rbenv n'était pas dans votre chemin.
(Vous pouvez définir une version Ruby spécifique au projet avec la rbenv local
commande, qui crée un .rbenv-version
fichier dans le répertoire actuel. De même, la rbenv global
commande modifie le ~/.rbenv/version
fichier.)
Armé d'une RBENV_VERSION
variable d'environnement, rbenv ajoute ~/.rbenv/versions/$RBENV_VERSION/bin
à l'avant de votre PATH
, puis exécute la commande et les arguments passés à rbenv exec
. Voila!
Pour un aperçu détaillé de ce qui se passe sous le capot, essayez de définir RBENV_DEBUG=1
et d'exécuter une commande Ruby. Chaque commande Bash exécutée par rbenv sera écrite sur votre terminal.
Maintenant, rbenv se préoccupe uniquement de changer de version, mais un écosystème prospère de plugins vous aidera à tout faire, de l' installation de Ruby à la configuration de votre environnement , en passant par la gestion des «gemsets» et même l' automatisationbundle exec
.
Je ne suis pas tout à fait sûr de ce que le support IRC a à voir avec le changement de version de Ruby, et rbenv est conçu pour être suffisamment simple et compréhensible pour ne pas nécessiter de support. Mais si jamais vous avez besoin d'aide, le suivi des problèmes et Twitter ne sont qu'à quelques clics.
Divulgation: Je suis l'auteur de rbenv, ruby-build et rbenv-vars.