rbenv ändert die Ruby-Version nicht

268

Ich habe rbenv gemäß den Github-Anweisungen installiert. Ich verwende OSX, habe dies jedoch auf einer Ubuntu 12.04-VM versucht und die gleichen Ergebnisse erzielt. Folgendes wird in meinem Terminal angezeigt, wenn ich versuche, Ruby-Versionen zu ändern:

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

Hat jemand eine Idee, warum rbenv die Ruby-Version nicht so wechselt, wie es denkt? Außerdem befindet sich im lokalen Verzeichnis keine .rbenv-Datei, die dazu führen würde, dass die Ruby-Version standardmäßig 1.8.7 ist

rbenv local
rbenv: no local version configured for this directory
Ajorgensen
quelle
Haben Sie den Init definitiv richtig in Ihren Bashrc eingefügt? Wie sieht dein $ PATH aus?
d11wtq
Keiner dieser Befehle ändert die von rbenv verwendete Ruby-Version, aber anscheinend wird Ihr Standard-Ruby nicht verwendet.
Andrew Marshall
@ d11wtq war korrekt. es war anscheinend nicht richtig in meinem ~ / .bash_profile.
Ajorgensen

Antworten:

518

Überprüfen Sie, ob PATH $ HOME / .rbenv / shims und $ HOME / .rbenv / bin enthält

$ env | grep PATH

Überprüfen Sie auch, ob in Ihrem ~ / .bash_profile Folgendes enthalten ist, wenn Sie bash verwenden, oder ~ / .zshenv, wenn Sie zsh verwenden

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

HINWEIS: Stellen Sie sicher, dass dies die letzte Einstellung in Ihrem ~ / .bash_profile ist. Ich bin auf ein Problem gestoßen, bei dem ich ein Programm installiert habe, das mein .bash_profile aktualisiert und PATH zurückgesetzt hat.

Stellen Sie schließlich sicher, dass Ihr $HOMEOrdner keine .ruby-versionDatei enthält, die Sie möglicherweise versehentlich erstellt haben, wenn Sie dies $ rbenv local <ruby-version>in Ihrem $HOMEOrdner getan hätten . Doing $ 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`.

Aus den Dokumenten:

Auswählen der Ruby-Version Wenn Sie einen Shim ausführen, bestimmt rbenv, welche Ruby-Version verwendet werden soll, indem es aus den folgenden Quellen in dieser Reihenfolge gelesen wird:

Die Umgebungsvariable RBENV_VERSION, falls angegeben. Mit dem Shell-Befehl rbenv können Sie diese Umgebungsvariable in Ihrer aktuellen Shell-Sitzung festlegen.

Die erste .ruby-Versionsdatei, die durch Durchsuchen des Verzeichnisses des Skripts, das Sie ausführen, und aller übergeordneten Verzeichnisse gefunden wird, bis das Stammverzeichnis Ihres Dateisystems erreicht ist.

Die erste .ruby-Versionsdatei, die durch Durchsuchen des aktuellen Arbeitsverzeichnisses und jedes seiner übergeordneten Verzeichnisse gefunden wurde, bis das Stammverzeichnis Ihres Dateisystems erreicht ist. Sie können die .ruby-Versionsdatei im aktuellen Arbeitsverzeichnis mit dem Befehl rbenv local ändern.

Die globale Datei ~ / .rbenv / version. Sie können diese Datei mit dem globalen Befehl rbenv ändern. Wenn die globale Versionsdatei nicht vorhanden ist, geht rbenv davon aus, dass Sie das "System" Ruby verwenden möchten - dh welche Version auch immer ausgeführt wird, wenn sich rbenv nicht in Ihrem Pfad befindet.

defvol
quelle
34
Vergessen Sie unter OSX nicht, sich von Ihrer OSX-Sitzung abzumelden und sich dann erneut anzumelden, damit die Änderungen an Ihrem Bash-Profil wirksam werden.
Jeremy Ricketts
15
Oder tun Sie exec $SHELL -l(unteres L)
pduersteler
3
Wo muss ich "$ HOME / .rbenv / shims" und "$ HOME / .rbenv / bin" hinzufügen?
Benedikt
3
Ich habe so gemacht: Funktioniert export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiziemlich gut :) Überprüfen Sie auch nach der rbenv-Deklaration, ob PATH-Inits vorhanden sind.
Merqlove
1
Für meinen Fall muss ich diese beiden Zeilen an .bashrc (Bash in Ubuntu) anhängen und dann habe ich die richtige Ruby-Version erhalten. Es funktioniert nicht, wenn es an .bash_profile angehängt wird.
Alexhilton
98

Ich habe dies behoben, indem ich meinem ~ / .bash_profile Folgendes hinzugefügt habe:

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

Dies ist unter https://github.com/sstephenson/rbenv dokumentiert .

Soweit ich weiß, gibt es kein ~ / .rbenv / bin-Verzeichnis, das in dem Beitrag von @rodowi erwähnt wurde.

mjmdavis
quelle
+1 für den Link. +1 für die Antwort, die einer besser abgestimmten Antwort widerspricht. Was eine weitere Frage aufwirft - und wenn sich jemand einschalten kann - wie kann es export PATH="$HOME/.rbenv/bin:$PATHfunktionieren (da es für mich fehlgeschlagen ist)?
Jerome
1
Es wird keine geben, ~/.rbenv/bin/wenn Sie über Homebrew oder Linuxbrew installiert haben. Und Sie sollten den Shims-Pfad nicht selbst einrichten müssen, ebenso rbenv initwie dies (und mehr) für Sie .
Dennis
Dies hat mein Problem behoben.
Martyn Chamberlin
Dies sollte in der README
onmyway133
Arbeitete für mich, nachdem ich stundenlang andere Sachen ausprobiert hatte. Vielen Dank!
cjs1978
91

Dies mag eine alte Frage sein, aber Google hat mich hierher geführt und aus Gründen der Nachwelt gedacht, ich würde sie teilen.

Mein Problem blieb nach vielen der oben empfohlenen Lösungen bestehen. Wie das OP habe ich rbenv und dann eine Ruby-Version installiert, aber mein Laptop hat standardmäßig das System verwendet. Was ich übersehen hatte, war das, als ich rannte:

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

IOW, es war immer noch Standard auf System. Ein schnelles

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

wechselte es auf die neue Version.

alphadogg
quelle
7
Ja - lustig, wie die Installationsanleitungen von rbenv nicht erwähnen, dass der lokale Befehl überhaupt ausgeführt wird. Viele Blogs erinnern Sie daran, rbenv global, aber nicht lokal auszuführen. Gute Antwort.
Steve Midgley
Gleiches Problem. Gleiche Lösung. (Möglicherweise müssen Sie eine PR einreichen, um zu erfahren, wann die globale Ruby-Version von einer ~ / .ruby-Version außer Kraft gesetzt wird ...)
Mark Glossop
Ich musste das System durch Entfernen mit YUM in Centos 7 loswerden, erst danach konnte ich die richtige Version sehen, die in rbenv ausgewählt wurde
Joe Walker
Ich bin schockiert, dass ich so weit graben musste, um eine Antwort zu erhalten. Dies ist die richtige für mich.
Ian Hyzy
Ich fand, dass der Befehl rbenv version besagte, dass 2.3.1 in .ruby-Versionen von rvm vielleicht gesetzt wurde. Ich hatte rvm vor einiger Zeit nicht mehr benutzt und bin zu rbenv gewechselt. Löschte .ruby-Versionen und führte rbenv-Versionen erneut aus und es wurde die neueste von rbenv ausgewählt (stellen Sie sicher, dass Sie die obige Anweisung eval in .bash_profile haben!). Jetzt funktioniert alles wie zuvor. Vielen Dank, dass Sie mir geholfen haben, dieses Problem zu lösen.
John Wooten
44

Der erste Schritt besteht darin herauszufinden, welcher Rubin genannt wird:
which ruby

Ihr System sagt:
/usr/bin/ruby

Dies ist NICHT die von rbenv verwendete Unterlegscheibe, die (unter MacOS) folgendermaßen aussehen sollte:
/Users/<username>/.rbenv/shims/ruby

Das Shim ist eigentlich ein Skript, das sich wie eine Umleitung zu der von Ihnen festgelegten Ruby-Version verhält.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Ich empfehle, dass Sie zur Fehlerbehebung die projektspezifische "lokale" Version und die Shell-spezifische "Shell" -Version deaktivieren und einfach mit der "globalen" Versionseinstellung testen, die in einer Nur-Text-Datei in ~ / .rbenv / verion welche festgelegt ist wird in Ihrem Fall nur die Versionsnummer "1.9.3" sein. Sie können "ls -laG" im Stammverzeichnis Ihres Projektordners (nicht im Home-Ordner) ausführen, um sicherzustellen, dass dort keine ".ruby-version" -Datei mehr vorhanden ist.

Sie können "rbenv-Versionen" verwenden, um zu identifizieren, welche Version rbenv verwendet werden soll (und den Speicherort und den Namen der Datei, die dies festlegt).

rbenv versions

Nichts davon: bis Sie den Pfad richtig eingestellt haben.

Verwenden Sie diese Option, um sicherzustellen, dass Ihr * MacOS Ihnen gehorcht:
eval "$(rbenv init -)"

Gefolgt von:
which ruby

Um sicherzustellen, dass es so aussieht: /Users//.rbenv/shims/ruby

Fügen Sie dann die Zeile zu Ihrem Profil hinzu, damit sie jedes Mal ausgeführt wird, wenn Sie ein neues Terminalfenster öffnen:
~/.bash_profile eval "$(rbenv init -)"

Es gibt andere Möglichkeiten, den Pfad zu ändern. Sie können ihn auch ersetzen, anstatt den rbenv-Init auszuführen.

HINWEIS: Installieren Sie Rails neu mit:
gem install rails

Wenn Sie versucht haben, Ruby on Rails auszuführen, muss dies alles zuerst funktionieren und dann das Rails-Juwel erneut installieren. Bei einer früheren Installation von Rails wird ein fest codierter Pfad zum falschen Rubin verwendet, und einige andere Dinge befinden sich am falschen Ort. Installieren Sie den Edelstein also erneut.

PS Wenn Ihr MacOS Ihnen nicht gehorcht (* oben erwähnt), müssen Sie möglicherweise einen anderen Weg finden, um Ihren Pfad zu ändern, aber das ist wahrscheinlich kein Problem, da "Macs funktionieren einfach";)

Sky benachrichtigen
quelle
1
Ah Kumpel, endlich! Versuchte ungefähr 25 verschiedene Lösungen, bevor ich diese fand, danke
Danny Santos
Gut erklärte Lösung. Danke dir.
Killscreen
23

Ich habe gerade das gleiche Problem gefunden. Ich habe rbenv (via homebrew) deinstalliert und neu installiert. Ich habe auch hinzugefügt

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

in ~ / .bash_profile, als ich rbenv neu installiert habe. Funktioniert jetzt perfekt.

Neal
quelle
1
Hinweis für andere, die das gleiche Problem wie ich hatten: Aus bestimmten Gründen funktionierte rbenv zuvor, sodass diese Zeile nie ausgeführt wurde. Ich habe es mit direkt eval "$ (rbenv init -)" behoben.
Dadoonet
Schöne kleine Bewertung für diesen Anwendungsfall!
Killscreen
18

In meinem Fall hat das Ändern ~/.zshenvnicht funktioniert. Ich musste die Änderungen im Inneren vornehmen ~/.zshrc.

Ich habe gerade hinzugefügt:

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

oben ~/.zshrcgestartet, die Shell neu gestartet und abgemeldet.

Überprüfen Sie, ob es funktioniert hat:

  ~ 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
quelle
Das funktioniert perfekt. Ich habe das in .bash_profile not / zshenv hinzugefügt.
Kang Byul
8

Führen Sie diesen Befehl aus

Fügen Sie rbenv zu bash hinzu, damit es jedes Mal geladen wird, wenn Sie ein Terminal öffnen

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

Dies wird Ihr Problem Referenz lösen

Singhak
quelle
1
Ich habe Stunden damit verbracht, das zu beheben. Endlich hat Ihre Lösung geholfen. Vielen Dank!!
User7354632781
5

Wenn Sie bash verwenden , gehen Sie zu

~/.bash_profile

und fügen Sie die folgende Zeile hinzu (falls noch nicht vorhanden)

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

Wenn Sie Zsh verwenden, gehen Sie zu

~/.zshrc

und fügen Sie am Ende der .zshrc-Datei dieselbe Codezeile hinzu.

Starten Sie dann einfach Ihr Terminal neu und es sollte jetzt in Ordnung sein.

drjorgepolanco
quelle
Leute auf Mac os Catalina sollten die zsh-Anweisung
befolgen
4

rbenv help shell

"Legt eine Shell-spezifische Ruby-Version fest, indem die Umgebungsvariable 'RBENV_VERSION' in Ihrer Shell festgelegt wird. Diese Version überschreibt lokale anwendungsspezifische Versionen und die globale Version. Sollte eine Zeichenfolge sein, die einer Ruby-Version entspricht, die rbenv bekannt ist. Das System der speziellen Versionszeichenfolge ' 'verwendet Ihr Standardsystem Ruby. Führen Sie rbenv-Versionen aus' für eine Liste der verfügbaren Ruby-Versionen. "

Vorausgesetzt, rbenv wurde korrekt installiert, entspricht ruby ​​-v

rbenv shell 1.9.3-p125

htmldrum
quelle
'rbenv shell xyz' hat bei mir funktioniert. Das in der höherrangigen Antwort oben beschriebene 'rbenv local xyz' funktionierte unter OS X nicht.
Jeremy Rea
4

Was mir der einfachste Weg , zu verwenden rbenvmit zusammen zshist das Hinzufügen rbenvzu Plugins Abschnitt in .zshrcConfig. In meinem Fall sieht es ähnlich aus wie:

# 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)

Danach gibt es keine Probleme beim Installieren, Wechseln, Verwenden von Ruby-Versionen mit Hilfe von rbenv.

Denken Sie daran, Ihre Terminalsitzung nach vorgenommenen Änderungen neu zu starten.

Rootical V.
quelle
4

Ich hatte das gleiche Problem, wurde aber von Homebrew verursacht:

[~]$ 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

Irgendwie hatte ich Ruby auch über Homebrew installiert, und der Homebrew-Pfad war dem rbenv-Pfad in meinem voraus $PATH. Laufen hat brew uninstall rubyes für mich behoben.

djb
quelle
4

Lauf:

rbenv init

Nachdem ich das ausgeführt habe, als ich meine lokale rbenv-Version eingestellt habe:

rbenv local 2.4.0

dann stimmten meine ruby -vund meine rbenv localVersionen überein.

Hinweis: Möglicherweise möchten Sie auch das Verzeichnis, in dem Sie sich befinden, beenden und dann wieder in dieses Verzeichnis zurückkehren. Ich habe festgestellt, dass dies für mich erforderlich war, damit die Dinge funktionieren.

AmitF
quelle
3

Ich bin auf das gleiche Problem gekommen. Dies wurde behoben, indem der Befehl "rbenv global" mit "sudo" ausgeführt wurde. Ich denke, es war ein Erlaubnisproblem.

Update: Ich habe endlich die Lösung gefunden. Auf meinem Mac befand sich dieselbe Datei "version" unter "/usr/local/Cellar/rbenv/0.3.0/". Ich denke, es wurde gelegentlich versehentlich erstellt. Sie sollten es entfernen.

Vincent
quelle
3

Als ich diese Symptome hatte, stellte sich heraus, dass die Installation für die neue Ruby-Version, zu der ich wechseln wollte, zur Hälfte fehlgeschlagen war, ohne dass ich es bemerkte. Das Update bestand darin, es zu löschen und neu zu installieren.

(Dies bedeutete, dass Ruby 1.9.3 zwar in der Liste der verfügbaren Versionen von rbenv angezeigt wurde, jedoch keine ausführbare Datei in dem Pfad hatte, in dem rbenv dies angenommen hatte. Da rbenv versucht, Ihre Ruby-Version zu ändern, indem nur ein Speicherort vorangestellt wird Ihr Pfad, wenn sich an dem vorangestellten Speicherort tatsächlich nichts befindet, sucht Ihr Betriebssystem gerne weiter nach Ihrem Standardpfad und findet Ihre Systemversion, in meinem Fall wie in der Frage 1.8.7.)

David
quelle
3

für Benutzer von Fischschalen

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

Dies ist mir direkt nach der Neuinstallation passiert rbenv. Anscheinend hatte ich eine .ruby-versionDatei in meinem Home-Verzeichnis, in der eine Version angegeben war, die nicht mehr existierte. Nachdem ich die Datei gelöscht hatte, funktionierte alles.

John K. Chow
quelle
2

Stellen Sie sicher, dass die letzte Zeile von Ihnen .bash_profilelautet:

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

Die akzeptierte Antwort schlägt vor, Folgendes hinzuzufügen:

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

Dies funktioniert nicht unter Mac OS X, auf das das OP verweist. Wenn Sie rbenv via installieren brew install rbenv, was wirklich die einzige Installationsmethode unter Mac OS X ist, da curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashFAIL unter OSX fehlschlägt, wird die ausführbare Datei rbenv installiert in:

$ which rbenv
/usr/local/bin/rbenv

Selbst unter OSX verbleibt das rbenv-Stammverzeichnis jedoch im Verzeichnis $ HOME:

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

Was bedeutet das? Wenn Sie Rubine installieren, werden diese im angegebenen Home-Verzeichnis unter .rbenv installiert:

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

Jetzt hat die Brew-Installation einige Arbeiten ausgeführt, die Sie unter Linux manuell ausführen müssten. Unter Linux müssten Sie beispielsweise Ruby-Build manuell als Plugin installieren:

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

Dies ist bereits mit der Homebrew-Installation geschehen. Es gibt einen wichtigen Schritt, der bei der Homebrew-Installation wie bei der Linux-Installation ausgeführt werden muss. Sie müssen die Rbenv-Shims zu Ihrem Pfad hinzufügen. Um dies zu tun, müssen Sie beim Start Ihrer Shell den folgenden Befehl auswerten (der wiederum die rbenv-Shims am Anfang Ihres $ PATH hinzufügt):

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

Wenn Sie jetzt laufen echo $PATH, sehen Sie die Rbenv-Unterlegscheiben:

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

Überprüfen Sie nun Ihre Ruby-Version und sie wird den installierten Rbenv-Ruby widerspiegeln:

ruby -v
ruby 2.6.0p0 
Donato
quelle
0

Seltsamerweise hat die rbenv-Version die .rbenv-Datei nicht festgelegt. Überprüfen Sie mit: ls -ltra ->, ob ein rbenv geschrieben wurde

Poseid
quelle
0

Sie könnten versuchen, chruby zu verwenden ? chruby verlässt sich nicht auf Beilagen, sondern es nur ändert PATH, GEM_HOME, GEM_PATH.

postmodern
quelle
-1

Ich habe vergessen, rvm vor der Installation von rbenv zu löschen. Ich habe rvm gelöscht und rbenv neu installiert, aber das System verwendete immer noch nicht die Version von Ruby, die von rbenv als global festgelegt wurde. Ich habe versucht, Terminal zu schließen, aber es hat nur funktioniert, nachdem ich den gesamten Computer neu gestartet habe.

Ajain
quelle