rbenv est un outil de gestion de versions pour le langage de programmation Ruby sur les systèmes de type Unix. Il est utile pour basculer entre plusieurs versions de Ruby sur la même machine et pour garantir que chaque projet sur lequel vous travaillez s'exécute toujours sur la bonne version de Ruby.
Une fois que rbenv s'est injecté dans votre PATH au moment de l'installation, toute invocation de ruby
, gem
, bundler
ou autre exécutable lié à Ruby activera d'abord rbenv. Ensuite, rbenv analyse le répertoire du projet actuel à la recherche d'un fichier nommé .ruby-version
. S'il est trouvé, ce fichier détermine la version de Ruby qui doit être utilisée dans ce répertoire. Enfin, rbenv recherche cette version de Ruby parmi celles installées sous ~/.rbenv/versions/
.
Vous pouvez choisir la version Ruby pour votre projet avec par exemple :
cd myproject
# choose Ruby version 3.1.2:
rbenv local 3.1.2
Cela créera ou mettra à jour le fichier .ruby-version
dans le répertoire actuel avec la version que vous avez choisie. Un autre de vos projets, qui est un autre répertoire, peut utiliser une version totalement différente de Ruby : rbenv passera de manière transparente d'une version de Ruby à une autre lorsque vous changerez de projet.
Enfin, presque tous les aspects du mécanisme de rbenv sont personnalisables via des plugins écrits en bash.
La simplicité de rbenv a ses avantages, mais aussi quelques inconvénients. Voir le comparatif des gestionnaires de versions pour plus de détails et quelques alternatives.
Sur les systèmes dotés du gestionnaire de packages Homebrew, la méthode « Utilisation des gestionnaires de packages » est recommandée. Sur d'autres systèmes, « Basic Git Checkout » peut être le moyen le plus simple de garantir que vous installez toujours la dernière version de rbenv.
Installez rbenv en utilisant l'une des approches suivantes.
Sous macOS ou Linux, nous vous recommandons d'installer rbenv avec Homebrew.
brew install rbenv
[!PRUDENCE]
La version de rbenv emballée et maintenue dans les référentiels officiels Debian et Ubuntu est obsolète . Pour installer la dernière version, il est recommandé d'installer rbenv en utilisant git.
sudo apt install rbenv
Archlinux dispose d'un package AUR pour rbenv et vous pouvez l'installer à partir de l'AUR en suivant les instructions de cette page wiki.
Fedora dispose d'un package officiel que vous pouvez installer :
sudo dnf install rbenv
Configurez votre shell pour charger rbenv.
rbenv init
Fermez la fenêtre de votre terminal et ouvrez-en une nouvelle pour que vos modifications prennent effet.
C'est ça! Vous êtes maintenant prêt à installer certaines versions de Ruby.
Note
Pour une installation plus automatisée, vous pouvez utiliser rbenv-installer. Si vous ne souhaitez pas exécuter de scripts téléchargés à partir d'une URL Web ou si vous préférez simplement une approche manuelle, suivez les étapes ci-dessous.
Cela vous permettra d'utiliser la dernière version de rbenv sans avoir besoin d'une installation à l'échelle du système.
Clonez rbenv dans ~/.rbenv
.
git clone https://github.com/rbenv/rbenv.git ~ /.rbenv
Configurez votre shell pour charger rbenv.
~ /.rbenv/bin/rbenv init
Si vous êtes curieux, regardez ici pour comprendre ce que fait init
.
Redémarrez votre shell pour que ces modifications prennent effet. (L'ouverture d'un nouvel onglet de terminal le fera généralement.)
Lors de l'installation manuelle de rbenv, il peut être utile de noter le fonctionnement des scripts de complétion pour différents shells. Les scripts de complétion aident à saisir les commandes rbenv en développant les noms de commandes rbenv et les indicateurs d'option partiellement saisis ; généralement, cela est invoqué en appuyant sur la touche Tab dans un shell interactif.
Le script d'achèvement bash pour rbenv est livré avec le projet et est chargé par le mécanisme rbenv init
.
Le script de complétion zsh est livré avec le projet, mais doit être ajouté à FPATH dans zsh avant de pouvoir être découvert par le shell. Une façon de procéder serait de modifier ~/.zshrc
:
# assuming that rbenv was installed to `~/.rbenv`
FPATH= ~ /.rbenv/completions: " $FPATH "
autoload -U compinit
compinit
Le script de complétion de poisson pour rbenv est livré avec la coquille de poisson elle-même et n'est pas maintenu par le projet rbenv.
La commande rbenv install
n'est pas livrée avec rbenv prête à l'emploi, mais est fournie par le plugin ruby-build.
Avant d'essayer d'installer Ruby, vérifiez que votre environnement de build dispose des outils et bibliothèques nécessaires . Alors:
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
# install a Ruby version:
rbenv install 3.1.2
Pour dépanner les scénarios BUILD FAILED
, consultez la section Discussions ruby-build.
Note
Si la commande rbenv install
n'est pas trouvée, vous pouvez installer ruby-build en tant que plugin :
git clone https://github.com/rbenv/ruby-build.git " $( rbenv root ) " /plugins/ruby-build
Définissez une version de Ruby pour terminer l'installation et commencer à utiliser Ruby :
rbenv global 3.1.2 # set the default Ruby version for this machine
# or:
rbenv local 3.1.2 # set the Ruby version for this directory
Alternativement à la commande rbenv install
, vous pouvez télécharger et compiler Ruby manuellement en tant que sous-répertoire de ~/.rbenv/versions
. Une entrée dans ce répertoire peut également être un lien symbolique vers une version de Ruby installée ailleurs sur le système de fichiers.
Sélectionnez une version Ruby pour votre projet en utilisant rbenv local 3.1.2
, par exemple. Ensuite, procédez à l’installation des gemmes comme vous le feriez normalement :
gem install bundler
Note
Vous ne devez pas utiliser sudo pour installer des gemmes. En règle générale, les versions Ruby seront installées sous votre répertoire personnel et donc accessibles en écriture par votre utilisateur. Si vous obtenez l'erreur « vous n'avez pas d'autorisations en écriture » lors de l'installation de gems, il est probable que la version Ruby de votre « système » soit toujours une valeur par défaut globale. Modifiez cela avec rbenv global <version>
et réessayez.
Vérifiez l'emplacement où les gemmes sont installées avec gem env
:
gem env home
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...
Au fil du temps, les versions Ruby que vous installez s'accumuleront dans votre répertoire ~/.rbenv/versions
.
Pour supprimer les anciennes versions de Ruby, rm -rf
le répertoire de la version que vous souhaitez supprimer. Vous pouvez trouver le répertoire d'une version particulière de Ruby avec la commande rbenv prefix
, par exemple rbenv prefix 2.7.0
.
Le plugin ruby-build fournit une commande rbenv uninstall
pour automatiser le processus de suppression.
Les principales commandes rbenv que vous devez connaître sont :
Répertorie toutes les versions de Ruby connues de rbenv et affiche un astérisque à côté de la version actuellement active.
$ rbenv versions
1.8.7-p352
1.9.2-p290
* 1.9.3-p327 (set by /Users/sam/.rbenv/version)
jruby-1.7.1
rbx-1.2.4
ree-1.8.7-2011.03
Affiche la version Ruby actuellement active, ainsi que des informations sur la façon dont elle a été définie.
$ rbenv version
1.9.3-p327 (set by /Users/sam/.rbenv/version)
Définit une version Ruby spécifique à l'application locale en écrivant le nom de la version dans un fichier .ruby-version
dans le répertoire actuel. Cette version remplace la version globale et peut être remplacée elle-même en définissant la variable d'environnement RBENV_VERSION
ou avec la commande rbenv shell
.
rbenv local 3.1.2
Lorsqu'il est exécuté sans numéro de version, rbenv local
indique la version locale actuellement configurée. Vous pouvez également supprimer la version locale :
rbenv local --unset
Définit la version globale de Ruby à utiliser dans tous les shells en écrivant le nom de la version dans le fichier ~/.rbenv/version
. Cette version peut être remplacée par un fichier .ruby-version
spécifique à l'application ou en définissant la variable d'environnement RBENV_VERSION
.
rbenv global 3.1.2
Le system
de noms de version spécial indique à rbenv d'utiliser le système Ruby (détecté en recherchant votre $PATH
).
Lorsqu'il est exécuté sans numéro de version, rbenv global
indique la version globale actuellement configurée.
Définit une version Ruby spécifique au shell en définissant la variable d'environnement RBENV_VERSION
dans votre shell. Cette version remplace les versions spécifiques à l'application et la version globale.
rbenv shell jruby-1.7.1
Lorsqu'il est exécuté sans numéro de version, rbenv shell
signale la valeur actuelle de RBENV_VERSION
. Vous pouvez également supprimer la version shell :
rbenv shell --unset
Notez que vous aurez besoin de l'intégration du shell de rbenv activée (étape 3 des instructions d'installation) pour pouvoir utiliser cette commande. Si vous préférez ne pas utiliser l'intégration shell, vous pouvez simplement définir vous-même la variable RBENV_VERSION
:
export RBENV_VERSION=jruby-1.7.1
Installe des cales pour tous les exécutables Ruby connus de rbenv ( ~/.rbenv/versions/*/bin/*
). En règle générale, vous n'avez pas besoin d'exécuter cette commande, car elle s'exécutera automatiquement après l'installation de gems.
rbenv rehash
Affiche le chemin complet de l'exécutable que rbenv appellera lorsque vous exécuterez la commande donnée.
$ rbenv which irb
/Users/sam/.rbenv/versions/1.9.3-p327/bin/irb
Répertorie toutes les versions de Ruby qui contiennent le nom d'exécutable spécifié.
$ rbenv whence rackup
1.9.3-p327
jruby-1.7.1
ree-1.8.7-2011.03
Vous pouvez affecter le fonctionnement de rbenv avec les paramètres suivants :
nom | défaut | description |
---|---|---|
RBENV_VERSION | Spécifie la version de Ruby à utiliser. Voir aussi rbenv shell | |
RBENV_ROOT | ~/.rbenv | Définit le répertoire sous lequel résident les versions et les shims Ruby. Voir aussi rbenv root |
RBENV_DEBUG | Produit des informations de débogage. Aussi comme : rbenv --debug <subcommand> | |
RBENV_HOOK_PATH | voir wiki | Liste des chemins recherchés pour les hooks rbenv, séparés par des deux-points. |
RBENV_DIR | $PWD | Répertoire pour commencer à rechercher les fichiers .ruby-version . |
rbenv init
est une commande d'aide pour amorcer rbenv dans un shell. Cet assistant fait partie des instructions d'installation recommandées, mais est facultatif, car un utilisateur avancé peut configurer manuellement les tâches suivantes. Voici ce que fait la commande lorsque sa sortie est eval
par un shell lors de son démarrage :
Ajoute l'exécutable rbenv
à PATH si nécessaire.
Ajoute le répertoire ~/.rbenv/shims
au PATH. C’est fondamentalement la seule condition requise pour que rbenv fonctionne correctement.
Installe l'achèvement du shell bash pour les commandes rbenv.
Régénère les cales rbenv. Si cette étape ralentit le démarrage de votre shell, vous pouvez appeler rbenv init -
avec l'indicateur --no-rehash
.
Installe le répartiteur "sh". Ce bit est également facultatif, mais permet à rbenv et aux plugins de modifier les variables de votre shell actuel, rendant ainsi possibles des commandes telles que rbenv shell
.
Vous pouvez exécuter rbenv init -
pour inspecter vous-même le script généré.
La simplicité de rbenv permet de le désactiver temporairement ou de le désinstaller du système.
Pour désactiver rbenv gérant vos versions Ruby, commentez ou supprimez simplement la ligne rbenv init
de la configuration de démarrage de votre shell. Cela supprimera le répertoire rbenv shims de PATH, et les futurs invocations comme ruby
exécuteront la version système Ruby, en contournant complètement rbenv.
Bien qu'il soit désactivé, rbenv
sera toujours accessible sur la ligne de commande, mais vos applications Ruby ne seront pas affectées par le changement de version.
Pour désinstaller complètement rbenv, effectuez l'étape (1), puis supprimez le répertoire racine de rbenv. Cela supprimera toutes les versions de Ruby installées sous `rbenv root`/versions/
:
rm -rf "$(rbenv root)"
Si vous avez installé rbenv à l'aide d'un gestionnaire de packages, effectuez comme dernière étape la suppression du package rbenv :
brew uninstall rbenv
sudo apt purge rbenv
sudo pacman -R rbenv
Les tests sont exécutés à l'aide de Bats :
$ bats test
$ bats test/<file>.bats
N'hésitez pas à soumettre des demandes d'extraction et à signaler des bogues sur le système de suivi des problèmes.