rbenv ne change pas la version rubis

269

J'ai installé rbenv selon les instructions de github. J'utilise OSX mais j'ai essayé cela sur une machine virtuelle Ubuntu 12.04 et j'ai obtenu les mêmes résultats. Voici ce que j'obtiens dans mon terminal lorsque j'essaie de changer les versions de rubis:

rbenv versions
* 1.9.3-p0 (set by /Users/user/.rbenv/version)
1.9.3-p125

rbenv global
1.9.3-p0

rbenv rehash

ruby -v
ruby 1.8.7 (2011-12-28 patchlevel 357) [universal-darwin11.0]

which ruby
/usr/bin/ruby

Quelqu'un a-t-il une idée de pourquoi rbenv ne change pas la version ruby ​​comme il le pense? De plus, il n'y a pas de fichier .rbenv dans le répertoire local qui entraînerait la version par défaut de ruby ​​à 1.8.7

rbenv local
rbenv: no local version configured for this directory
ajorgensen
la source
Avez-vous mis correctement l'init dans votre bashrc correctement? À quoi ressemble votre $ PATH?
d11wtq
Aucune de ces commandes ne modifie la version Ruby utilisée par rbenv, mais il semble qu'elle n'utilise pas votre Ruby par défaut.
Andrew Marshall
@ d11wtq était correct. il n'était pas apparemment correctement dans mon ~ / .bash_profile.
ajorgensen

Réponses:

520

Vérifiez que PATH contient $ HOME / .rbenv / shims et $ HOME / .rbenv / bin

$ env | grep PATH

Vérifiez également que vous avez les éléments suivants dans votre ~ / .bash_profile si vous utilisez bash ou ~ / .zshenv si vous utilisez zsh

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

REMARQUE: assurez-vous qu'il s'agit du dernier paramètre de votre ~ / .bash_profile. J'ai rencontré un problème où j'ai installé un programme qui a mis à jour mon .bash_profile et réinitialisé PATH.

Enfin, assurez-vous que votre $HOMEdossier ne contient pas de .ruby-versionfichier que vous pourriez avoir créé par accident si vous deviez l'avoir fait $ rbenv local <ruby-version>dans votre $HOMEdossier. Faire $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / version file, and the existence of a.ruby-version file in the$ HOME folder would override the version set by$ HOME / .rbenv / version`.

De la documentation:

Choix de la version Ruby Lorsque vous exécutez un shim, rbenv détermine la version Ruby à utiliser en la lisant à partir des sources suivantes, dans cet ordre:

La variable d'environnement RBENV_VERSION, si spécifiée. Vous pouvez utiliser la commande shell rbenv pour définir cette variable d'environnement dans votre session shell actuelle.

Le premier fichier .ruby-version trouvé en recherchant le répertoire du script que vous exécutez et chacun de ses répertoires parents jusqu'à atteindre la racine de votre système de fichiers.

Le premier fichier .ruby-version trouvé en recherchant le répertoire de travail actuel et chacun de ses répertoires parents jusqu'à atteindre la racine de votre système de fichiers. Vous pouvez modifier le fichier .ruby-version dans le répertoire de travail actuel avec la commande locale rbenv.

Le fichier global ~ / .rbenv / version. Vous pouvez modifier ce fichier à l'aide de la commande globale rbenv. Si le fichier de version globale n'est pas présent, rbenv suppose que vous souhaitez utiliser le Ruby «système», c'est-à-dire quelle que soit la version qui serait exécutée si rbenv n'était pas sur votre chemin.

defvol
la source
34
Sur OSX, n'oubliez pas de vous déconnecter de votre session OSX, puis de vous reconnecter pour que les modifications apportées à votre profil bash prennent effet.
Jeremy Ricketts
15
Ou faites exec $SHELL -l(inférieur L)
pduersteler
3
Où dois-je ajouter les "$ HOME / .rbenv / shims" et "$ HOME / .rbenv / bin"?
Benedikt
3
J'ai fait comme ceci: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiFonctionne plutôt bien :) Vérifiez également les init de PATH après la déclaration rbenv.
merqlove
1
Pour mon cas, je dois ajouter ces deux lignes dans .bashrc (Bash dans Ubuntu), puis j'ai obtenu la bonne version ruby. Cela ne fonctionne pas si vous l'ajoutez à .bash_profile.
alexhilton
98

J'ai corrigé cela en ajoutant ce qui suit à mon ~ / .bash_profile:

#PATH for rbenv
export PATH="$HOME/.rbenv/shims:$PATH"

C'est ce qui est documenté sur https://github.com/sstephenson/rbenv .

D'après ce que je peux dire, il n'y a pas de répertoire ~ / .rbenv / bin, qui a été mentionné dans le message de @rodowi.

mjmdavis
la source
+1 pour le lien. +1 pour la réponse qui contredit une réponse mieux votée. Ce qui soulève une autre question - et si quelqu'un peut sonner - comment peut-il export PATH="$HOME/.rbenv/bin:$PATHfonctionner (car cela a échoué pour moi)?
Jerome
1
Il n'y en aura pas ~/.rbenv/bin/si vous avez installé via homebrew ou linuxbrew. Et vous ne devriez pas avoir à configurer vous-même le chemin des cales, comme rbenv initcela (et plus) pour vous .
Dennis
Cela a résolu mon problème.
Martyn Chamberlin
Cela devrait être dans le README
onmyway133
A travaillé pour moi après des heures à essayer d'autres choses. Merci!
cjs1978
91

C'est peut-être une vieille question, mais Google m'a conduit ici et, pour l'amour de la postérité, a pensé que je partagerais.

Mon problème a persisté après plusieurs des solutions recommandées ci-dessus. Comme l'OP, j'ai installé rbenv puis une version rubis, mais mon ordinateur portable est par défaut sur système. Ce que j'avais oublié, c'est que lorsque j'ai couru:

[~/.rbenv] $ rbenv versions
* system (set by /Users/alphadogg/.rbenv/version)
  2.0.0-p247

IOW, il faisait toujours défaut au système. Un rapide

[~/.rbenv] $ rbenv local 2.0.0-p247

passé à la nouvelle version.

alphadogg
la source
7
Oui - drôle comment les guides d'installation de rbenv ne mentionnent pas du tout l'exécution de la commande locale. De nombreux blogs vous rappellent de lancer rbenv global mais pas local. Très bonne réponse.
Steve Midgley
Même problème. Même solution. (Il faudra peut-être envisager de soumettre un PR pour indiquer quand la version globale de Ruby est annulée par une version ~ / .ruby ...)
Mark Glossop
J'ai dû me débarrasser du système en supprimant avec YUM dans Centos 7, seulement après que j'ai pu voir la bonne version sélectionnée dans rbenv
Joe Walker
Je suis choqué d'avoir dû creuser si loin pour une réponse, c'est la bonne pour moi.
Ian Hyzy
J'ai trouvé que la commande rbenv versions disait que 2.3.1 était peut-être défini dans .ruby-versions par rvm. J'avais arrêté d'utiliser rvm il y a un moment et je suis passé à rbenv. Supprimé les versions .ruby et exécuté à nouveau les versions rbenv et la dernière a été sélectionnée par rbenv (assurez-vous d'avoir l'instruction eval ci-dessus dans .bash_profile!). Maintenant, tout fonctionne comme avant. Merci de m'avoir aidé à résoudre ce problème.
John Wooten
45

La première étape consiste à savoir quel rubis est appelé:
which ruby

Votre système dit:
/usr/bin/ruby

Ce n'est PAS le shim utilisé par rbenv, qui (sous MacOS) devrait ressembler à:
/Users/<username>/.rbenv/shims/ruby

Le shim est en fait un script qui agit comme une redirection vers la version de ruby ​​que vous définissez.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Je recommande que pour résoudre les problèmes, vous ne définissiez pas la version "locale" spécifique au projet et la version "shell" spécifique au shell et testiez simplement en utilisant le paramètre de version "global" qui est déterminé dans un fichier texte en clair dans ~ / .rbenv / verion qui sera juste le numéro de version "1.9.3" dans votre cas. Vous pouvez faire "ls -laG" à la racine de votre dossier de projet (pas le dossier de départ) pour vous assurer qu'il n'y a plus de fichier ".ruby-version".

Vous pouvez utiliser les "versions rbenv" pour identifier la version que rbenv doit utiliser (ainsi que l'emplacement et le nom du fichier qui le définit).

rbenv versions

AUCUN DE CE QUI COMPTE: jusqu'à ce que vous définissiez le chemin correctement.

Utilisez ceci pour vous assurer que votre * MacOS vous obéira:
eval "$(rbenv init -)"

Suivi par:
which ruby

Pour vous assurer qu'il ressemble à: /Users//.rbenv/shims/ruby

Ajoutez ensuite la ligne à votre profil pour qu'elle s'exécute chaque fois que vous ouvrez une nouvelle fenêtre de terminal:
~/.bash_profile eval "$(rbenv init -)"

Il existe d'autres façons de modifier le chemin d'accès, n'hésitez pas à les remplacer au lieu d'exécuter l'initialisation rbenv.

REMARQUE: réinstallez Rails avec:
gem install rails

Si vous essayez d'exécuter Ruby on Rails, vous devez d'abord tout faire fonctionner, puis réinstaller la gemme des rails. Une installation précédente de Rails utilisera un chemin codé en dur vers le mauvais rubis et plusieurs autres choses seront au mauvais endroit, alors réinstallez simplement la gemme.

PS Si votre MacOS ne vous obéira pas (* mentionné ci-dessus), vous devrez peut-être trouver un autre moyen de modifier votre chemin, mais cela ne posera probablement pas de problème car "les Mac fonctionnent tout simplement";)

Sky Notify
la source
1
Ah mec, enfin! J'ai essayé environ 25 solutions différentes avant de trouver celle-ci, merci
Danny Santos
Solution bien expliquée. Je vous remercie.
killscreen
23

Je viens de trouver ce même problème. Ce que j'ai fait, c'est désinstaller rbenv (via homebrew) et le réinstaller. J'ai aussi ajouté

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

dans ~ / .bash_profile lorsque j'ai réinstallé rbenv. Fonctionne parfaitement maintenant.

Neal
la source
1
Remarque pour d'autres qui ont rencontré le même problème que moi: Pour certaines raisons, qui rbenv fonctionnait auparavant, cette ligne n'a jamais été exécutée. Je l'ai corrigé en utilisant directement eval "$ (rbenv init -)".
dadoonet
Belle petite déclaration d'évaluation pour ce cas d'utilisation!
killscreen
18

Dans mon cas, le changement ~/.zshenvn'a pas fonctionné. J'ai dû faire les changements à l'intérieur ~/.zshrc.

Je viens d'ajouter:

# Include rbenv for ZSH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

en haut de ~/.zshrc, redémarré le shell et déconnecté.

Vérifiez si cela a fonctionné:

  ~ rbenv install 2.4.0
  ~ rbenv global 2.4.0
  ~ rbenv global
2.4.0
  ~ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
Peter Piper
la source
Cela fonctionne parfaitement. J'ai ajouté cela dans .bash_profile pas / zshenv.
Kang Byul
8

Exécutez cette commande

Ajoutez rbenv à bash pour qu'il se charge à chaque fois que vous ouvrez un terminal

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
source ~/.bash_profile

cela résoudra votre problème Référence

Singhak
la source
1
J'ai passé des heures à résoudre ce problème. Enfin, votre solution a aidé. Merci!!
User7354632781
5

Si vous utilisez bash , accédez à

~/.bash_profile

et ajoutez la ligne suivante (si ce n'est pas déjà fait)

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

Si vous utilisez Zsh, accédez à

~/.zshrc

et ajoutez la même ligne de code, à la fin du fichier .zshrc.

Ensuite, redémarrez simplement votre terminal et ça devrait aller maintenant.

drjorgepolanco
la source
Les gens sur Mac os Catalina, devraient suivre l'instruction zsh
Abhinay
4

rbenv help shell

"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 locale et la version globale. Devrait être une chaîne correspondant à une version Ruby connue de rbenv. "utilisera votre système par défaut Ruby. Exécuter les versions de rbenv" pour une liste des versions Ruby disponibles. "

Si rbenv a été installé correctement, ruby ​​-v correspondra à

rbenv shell 1.9.3-p125

htmldrum
la source
'rbenv shell xyz' est ce qui a fonctionné pour moi. Le «rbenv local xyz» décrit dans la réponse la mieux classée ci-dessus n'a pas fonctionné sur OS X.
Jeremy Rea
4

Quant à moi la meilleure façon d'utiliser rbenvainsi zshest d' ajouter rbenvà la section plugins dans .zshrcconfig. Dans mon cas, cela ressemble à:

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git bower rails ruby rbenv gulp npm node nvm sublime)

Après cela, il n'y a aucun problème lors de l'installation, de la commutation, de l'utilisation des versions ruby ​​avec l'aide de rbenv .

Pensez à redémarrer votre session de terminal après avoir apporté des modifications.

Rootical V.
la source
4

J'ai eu le même problème, mais causé par Homebrew:

[~]$ rbenv version
2.3.0 (set by /Users/user/.rbenv/version)
[~]$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16]
[~]$ which ruby
/usr/local/bin/ruby

D'une certaine manière, j'avais également installé Ruby via Homebrew, et le chemin Homebrew était en avance sur le chemin rbenv dans mon $PATH. Courir l'a brew uninstall rubyréparé pour moi.

djb
la source
4

courir:

rbenv init

Après avoir exécuté cela, lorsque j'ai défini ma version locale de rbenv:

rbenv local 2.4.0

puis ma ruby -vet mes rbenv localversions ont coïncidé.

Remarque: Vous voudrez peut-être également quitter le répertoire dans lequel vous vous trouvez, puis y retourner, j'ai remarqué que c'était nécessaire pour moi afin que les choses fonctionnent.

AmitF
la source
3

J'en suis venu au même problème. Corrigé cela en exécutant la commande "rbenv global" avec "sudo". Je pense que c'était un problème de permission.

mise à jour: j'ai enfin trouvé la solution. Il y avait un même fichier "version" sur mon Mac, qui se trouve sous "/usr/local/Cellar/rbenv/0.3.0/". Je pense qu'il a été créé par erreur de temps en temps. vous devez le supprimer.

Vincent
la source
3

Lorsque j'ai eu ces symptômes, le problème s'est avéré que l'installation avait échoué à mi-chemin pour la nouvelle version de Ruby vers laquelle j'essayais de passer, sans que je m'en rende compte. Le correctif consistait à le supprimer et à le réinstaller.

(Cela signifiait que même si ruby ​​1.9.3 apparaissait dans la liste rbenv des versions disponibles, il n'avait pas d'exécutable sur le chemin où rbenv le supposait. Puisque rbenv essaie de changer votre version ruby ​​simplement en ajoutant un emplacement à votre chemin, s'il n'y a rien réellement à l'emplacement qu'il précède, votre système d'exploitation continuera volontiers à rechercher votre chemin par défaut et à trouver la version de votre système, dans mon cas comme la question 1.8.7.)

David
la source
3

pour l'utilisateur de coquille de poisson

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/
Basil Mariano
la source
2

Cela m'est arrivé juste après ma réinstallation rbenv. Apparemment, j'avais un .ruby-versionfichier dans mon répertoire personnel, spécifiant une version qui n'existait plus. Une fois que j'ai supprimé le fichier, tout a fonctionné.

John K. Chow
la source
2

Assurez-vous que la dernière ligne de votre .bash_profileest:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
elimcjah
la source
1

La réponse acceptée suggère d'ajouter ce qui suit:

export PATH="$HOME/.rbenv/bin:$PATH"

Cela ne fonctionnera pas sur Mac OSX, auquel l'OP fait référence. En fait, si vous installez rbenv via brew install rbenv, qui est vraiment la seule méthode d'installation sous Mac OSX, car curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashÉCHOUERA sous OSX, alors l'exécutable rbenv sera installé dans:

$ which rbenv
/usr/local/bin/rbenv

Cependant, même sous OSX, la racine rbenv restera dans le répertoire $ HOME:

~ viggy$ rbenv root
/Users/viggy/.rbenv

Qu'est-ce que ça veut dire? Cela signifie que lorsque vous installez des rubis, ils s'installent dans le répertoire personnel donné sous .rbenv:

$ rbenv install 2.6.0
$ ls ~/.rbenv/versions
2.6.0

Maintenant, l'installation de brew a fait un travail que vous auriez à effectuer manuellement sous Linux. Par exemple, sous Linux, vous devrez installer ruby-build manuellement en tant que plugin:

$ mkdir -p "$(rvbenv root)/plugins"
$ git clone https://github.com/rbenv/ruby-build.git "(rbenv root)"/plugins/ruby-build

C'est déjà fait avec l'installation homebrew. Il y a une étape importante qui doit être effectuée dans l'installation homebrew, comme dans l'installation Linux. Vous devez ajouter les cales rbenv à votre chemin. Pour ce faire, lorsque votre shell démarre, vous devez évaluer la commande suivante (qui à son tour ajoutera les cales rbenv au début de votre $ PATH):

$ vim ~/.bash_profile
eval "$(rbenv init -)"
$ source ~/.bash_profile

Maintenant, lorsque vous exécutez echo $PATH, vous verrez les cales rbenv:

$ echo $PATH
/Users/viggy/.rbenv/shims:

Maintenant, vérifiez votre version ruby ​​et elle reflétera le rubis rbenv installé:

ruby -v
ruby 2.6.0p0 
Donato
la source
0

Étrangement, la version rbenv n'a pas défini le fichier .rbenv Vérifiez avec: ls -ltra -> pour voir qu'un rbenv a été écrit

poseid
la source
0

Vous pourriez essayer d'utiliser chruby ? chruby ne repose pas sur des cales, au lieu qu'il ne modifie que PATH, GEM_HOME, GEM_PATH.

postmoderne
la source
-1

J'ai oublié de supprimer rvm avant d'installer rbenv. J'ai supprimé rvm et réinstallé rbenv, mais le système n'utilisait toujours pas la version de Ruby désignée comme globale par rbenv. J'ai essayé de fermer Terminal, mais cela n'a fonctionné qu'une fois que j'ai redémarré toute la machine.

ajain
la source