rbenv non cambia la versione ruby


269

Ho installato rbenv secondo le indicazioni di github. Sto eseguendo OSX ma ho provato questo su una macchina virtuale Ubuntu 12.04 e ho ottenuto gli stessi risultati. Quello che segue è quello che ottengo nel mio terminale quando provo a cambiare la versione di Ruby:

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

Qualcuno ha qualche idea sul perché rbenv non sta cambiando la versione ruby ​​come pensa che sia? Inoltre, nella directory locale non esiste alcun file .rbenv che causerebbe il default della versione ruby ​​su 1.8.7

rbenv local
rbenv: no local version configured for this directory

Hai messo correttamente init nel tuo bashrc correttamente? Che aspetto ha il tuo $ PATH?
d11wtq,

Nessuno di questi comandi modifica la versione di Ruby che rbenv sta usando, ma sembra che non stia usando il tuo Ruby predefinito.
Andrew Marshall,

@ d11wtq era corretto. apparentemente nel mio ~ / .bash_profile non era correttamente.
Ajorgensen,

Risposte:


519

Verifica che PATH contenga $ HOME / .rbenv / shims e $ HOME / .rbenv / bin

$ env | grep PATH

Controlla anche di avere quanto segue nel tuo ~ / .bash_profile se usi bash o ~ / .zshenv se usi zsh

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

NOTA: assicurati che sia l'ultima impostazione nel tuo ~ / .bash_profile. Ho riscontrato un problema in cui ho installato un programma che ha aggiornato il mio .bash_profile e ripristinato PATH.

Infine, assicurati che la tua $HOMEcartella non abbia un .ruby-versionfile che potresti aver creato per sbaglio se avessi dovuto farlo $ rbenv local <ruby-version>nella tua $HOMEcartella. Fare $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / versione file, and the existence of a.ruby-versione file in the$ HOME folder would override the version set by$ HOME / .rbenv / versione`.

Dai documenti:

Scelta della versione di Ruby Quando si esegue uno shim, rbenv determina quale versione di Ruby utilizzare leggendola dalle seguenti fonti, in questo ordine:

La variabile di ambiente RBENV_VERSION, se specificata. È possibile utilizzare il comando rbenv shell per impostare questa variabile di ambiente nella sessione di shell corrente.

Il primo file .ruby-version trovato cercando nella directory dello script che stai eseguendo e in ognuna delle sue directory principali fino a raggiungere la radice del tuo filesystem.

Il primo file .ruby-version trovato cercando la directory di lavoro corrente e ciascuna delle sue directory principali fino a raggiungere la radice del filesystem. È possibile modificare il file .ruby-version nella directory di lavoro corrente con il comando rbenv local.

Il file ~ / .rbenv / versione globale. È possibile modificare questo file utilizzando il comando globale rbenv. Se il file della versione globale non è presente, rbenv presuppone che si desidera utilizzare il "sistema" Ruby, ovvero qualsiasi versione verrebbe eseguita se rbenv non fosse presente nel proprio percorso.


34
Su OSX, non dimenticare di disconnettersi dalla sessione OSX e quindi riconnettersi per rendere effettive le modifiche al profilo bash.
Jeremy Ricketts,

15
Oppure fai exec $SHELL -l(L inferiore)
pduersteler il

3
Dove devo aggiungere "$ HOME / .rbenv / shims" e "$ HOME / .rbenv / bin"?
Benedikt,

3
Ho fatto così: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiFunzionando abbastanza bene :) Controlla anche i PATH init dopo la dichiarazione rbenv.
merqlove,

1
Per il mio caso, ho bisogno di aggiungere queste due righe in .bashrc (Bash in Ubuntu) e poi ho ottenuto la versione ruby ​​corretta. Non funziona se lo aggiungi in .bash_profile.
alexhilton,

98

Ho risolto questo aggiungendo quanto segue al mio ~ / .bash_profile:

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

Questo è ciò che è documentato su https://github.com/sstephenson/rbenv .

Da quello che posso dire non esiste una directory ~ / .rbenv / bin, menzionata nel post da @rodowi.


+1 per il collegamento. +1 per la risposta che contraddice una risposta votata meglio. Il che solleva un'ulteriore domanda - e se qualcuno può intervenire - come può export PATH="$HOME/.rbenv/bin:$PATHfunzionare (poiché per me è fallito)?
Girolamo

1
Non ci sarà un ~/.rbenv/bin/se installato tramite homebrew o linuxbrew. E non dovresti impostare tu stesso il percorso degli spessori, così come rbenv initquesto (e altro) per te .
Dennis,

Questo ha risolto il mio problema.
Martyn Chamberlin,

Questo dovrebbe essere nel README
onmyway133

Ha funzionato per me dopo ore di provare altre cose. Grazie!
cjs1978,

91

Questa potrebbe essere una vecchia domanda, ma Google mi ha portato qui e, per amor dei posteri, ha pensato di condividere.

Il mio problema persisteva dopo molte delle soluzioni consigliate sopra. Come l'OP, ho installato rbenv e poi una versione ruby, ma il mio laptop è passato al sistema. Quello che avevo trascurato era che quando correvo:

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

IOW, il sistema era ancora predefinito. Un veloce

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

è passato alla nuova versione.


7
Sì - divertente come le guide all'installazione di rbenv non menzionino affatto l'esecuzione del comando locale. Molti blog ti ricordano di eseguire rbenv globale ma non locale. Bella risposta.
Steve Midgley,

Stesso problema. Stessa soluzione (Potrebbe essere necessario inviare una PR per avvisare quando la versione globale di Ruby viene annullata da una versione ~ / .ruby ...)
Mark Glossop,

Ho dovuto sbarazzarmi del sistema rimuovendo con YUM in Centos 7, solo dopo ho potuto vedere la versione corretta selezionata in rbenv
Joe Walker

Sono scioccato che ho dovuto scavare così lontano per una risposta, questa è quella giusta per me.
Ian Hyzy,

Ho scoperto che il comando rbenv version ha detto che 2.3.1 era forse impostato in .ruby-version da rvm. Avevo smesso di usare rvm qualche tempo fa e sono passato a rbenv. Eliminate le versioni .ruby ed eseguito di nuovo le versioni di rbenv e l'ultima è stata selezionata da rbenv (assicuratevi di avere l'istruzione eval sopra in .bash_profile!). Ora, tutto funziona come prima. Grazie per avermi aiutato a risolvere questo problema.
John Wooten,

45

Il primo passo è scoprire quale rubino viene chiamato:
which ruby

Il tuo sistema dice:
/usr/bin/ruby

Questo NON è lo spessore utilizzato da rbenv, che (su MacOS) dovrebbe apparire come:
/Users/<username>/.rbenv/shims/ruby

Lo shim è in realtà uno script che si comporta come un reindirizzamento alla versione di ruby ​​impostata.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Raccomando che per la risoluzione dei problemi disinserisca la versione "locale" specifica del progetto e la versione "shell" specifica della shell e provi semplicemente usando l'impostazione della versione "globale" che è determinata in un file di testo normale in ~ / .rbenv / verion che sarà solo il numero di versione "1.9.3" nel tuo caso. Puoi fare "ls -laG" nella root della cartella del tuo progetto (non la cartella home) per assicurarti che non ci sia più un file ".ruby-version" lì.

È possibile utilizzare "Versioni rbenv" per identificare quale versione rbenv è impostata per l'uso (e la posizione e il nome del file che lo sta impostando).

rbenv versions

NESSUNO DI QUESTE QUESTIONI: fino a quando non imposti correttamente il percorso.

Usa questo per assicurarti che il tuo * MacOS ti obbedisca:
eval "$(rbenv init -)"

Seguito da:
which ruby

Per essere sicuro che assomigli a: /Users//.rbenv/shims/ruby

Quindi aggiungi la linea al tuo profilo in modo che venga eseguita ogni volta che apri una nuova finestra del terminale:
~/.bash_profile eval "$(rbenv init -)"

Esistono altri modi per modificare il percorso, sentiti libero di sostituirne uno invece di eseguire rbenv init.

NOTA: reinstallare Rails con:
gem install rails

Se stavi cercando di eseguire Ruby on Rails, devi prima avere tutto questo funzionante, quindi installare di nuovo la gemma rails. Una precedente installazione di Rails utilizzerà un percorso codificato rigido per il rubino sbagliato e molte altre cose saranno nel posto sbagliato, quindi basta installare nuovamente la gemma.

PS Se il tuo MacOS non ti obbedisce (* menzionato sopra), potresti dover trovare un altro modo per modificare il tuo percorso, ma è improbabile che si tratti di un problema perché "I Mac funzionano";)


1
Ah amico, finalmente! Ho provato circa 25 diverse soluzioni prima di trovare questa, grazie
Danny Santos l'

Soluzione ben spiegata Grazie.
Killscreen

23

Ho appena trovato questo stesso problema. Quello che ho fatto è stato disinstallare rbenv (tramite homebrew) e reinstallarlo. Ho anche aggiunto

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

in ~ / .bash_profile quando ho reinstallato rbenv. Funziona perfettamente ora.


1
Nota per altri che hanno riscontrato lo stesso problema: per alcuni motivi, quale rbenv funzionava in precedenza, quindi questa riga non è mai stata eseguita. L'ho corretto usando direttamente eval "$ (rbenv init -)".
dadoonet,

Bella piccola dichiarazione di valutazione per questo caso d'uso!
Killscreen

18

Nel mio caso, cambiare ~/.zshenvnon ha funzionato. Ho dovuto apportare le modifiche all'interno ~/.zshrc.

Ho appena aggiunto:

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

nella parte superiore di ~/.zshrc, riavviato la shell e disconnesso.

Controlla se ha funzionato:

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

Funziona perfettamente. L'ho aggiunto in .bash_profile non / zshenv.
Kang Byul,

8

Esegui questo comando

Aggiungi rbenv a bash in modo che si carichi ogni volta che apri un terminale

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

questo risolverà il tuo problema di riferimento


1
Ho passato ore a risolvere questo problema. Finalmente la tua soluzione ha aiutato. Grazie!!
Utente 7354632781

5

Se stai usando bash , vai a

~/.bash_profile

e aggiungi la seguente riga (se non è già presente)

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

Se stai usando Zsh, vai a

~/.zshrc

e aggiungi la stessa riga di codice, alla fine del file .zshrc.

Quindi riavvia semplicemente il tuo terminale e ora dovrebbe andare bene.


Le persone su Mac os Catalina, dovrebbero seguire le istruzioni zsh
Abhinay,

4

rbenv help shell

"Imposta una versione di Ruby specifica della shell impostando la variabile di ambiente 'RBENV_VERSION' nella tua shell. Questa versione sovrascrive le versioni specifiche dell'applicazione locale e la versione globale. Dovrebbe essere una stringa corrispondente a una versione di Ruby nota a rbenv. Il sistema della stringa della versione speciale ' "utilizzerà il tuo sistema Ruby predefinito. Esegui le versioni rbenv" per un elenco delle versioni disponibili di Ruby. "

Se rbenv è stato installato correttamente, ruby ​​-v corrisponderà

rbenv shell 1.9.3-p125


'rbenv shell xyz' è ciò che ha funzionato per me. Il 'xben locale di rbenv' descritto nella risposta sopra classificata sopra non funzionava su OS X.
Jeremy Rea,

4

Per quanto mi riguarda, il modo più semplice da usare rbenvinsieme zshè l'aggiunta rbenvalla sezione plugin in .zshrcconfig. Nel mio caso sembra simile a:

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

Dopodiché non ci sono problemi durante l'installazione, il passaggio e l'utilizzo delle versioni ruby ​​con l'aiuto di rbenv.

Ricordati di riavviare la sessione del terminale dopo aver apportato le modifiche.


4

Ho avuto lo stesso problema, ma causato da 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

In qualche modo avevo installato anche Ruby tramite Homebrew e il percorso Homebrew era in anticipo rispetto al percorso rbenv nel mio $PATH. La corsa l'ha brew uninstall rubyriparato per me.


4

correre:

rbenv init

Dopo averlo eseguito, quando ho impostato la mia versione rbenv locale:

rbenv local 2.4.0

quindi la mia ruby -ve la mia rbenv localversione coincidevano.

Nota: potresti anche voler uscire dalla directory in cui ti trovi e poi tornare in essa, ho notato che era necessario per me per far funzionare le cose.


3

Sono arrivato allo stesso problema. Risolto il problema eseguendo il comando "rbenv global" con "sudo". Penso che sia stato un problema di autorizzazione.

aggiornamento: ho finalmente trovato la soluzione. C'era lo stesso file "versione" sul mio mac, che si trova sotto "/usr/local/Cellar/rbenv/0.3.0/". Penso che sia stato creato per errore di tanto in tanto. dovresti rimuoverlo.


3

Quando ho avuto questi sintomi, il problema è stato che l'installazione non era riuscita a metà strada per la nuova versione di Ruby che stavo cercando di passare, senza che me ne accorgessi. La correzione era eliminarla e reinstallarla.

(Ciò significa che anche se ruby ​​1.9.3 è apparso nell'elenco rbenv delle versioni disponibili, non aveva un eseguibile sul percorso in cui rbenv pensava che sarebbe stato. Dal momento che rbenv tenta di cambiare la versione di ruby ​​semplicemente anteponendo una posizione a il tuo percorso, se non c'è nulla nella posizione che precede, il tuo sistema operativo continuerà felicemente a cercare il percorso predefinito e troverà la versione del tuo sistema, nel mio caso come la domanda 1.8.7.)


3

per l'utente conchiglia di pesce

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/

2

Questo mi è successo subito dopo la reinstallazione rbenv. Apparentemente avevo un .ruby-versionfile nella mia directory home, specificando una versione che non esisteva più. Una volta eliminato il file, tutto ha funzionato.


2

Assicurati che l'ultima riga del tuo .bash_profilesia:

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

1

La risposta accettata suggerisce di aggiungere quanto segue:

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

Questo non funzionerà su Mac OSX, a cui fa riferimento l'OP. Infatti, se installi rbenv via brew install rbenv, che è davvero l'unico metodo di installazione in Mac OSX, poiché curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashFAIL in OSX, l'eseguibile rbenv verrà installato in:

$ which rbenv
/usr/local/bin/rbenv

Tuttavia, anche in OSX, la radice rbenv rimarrà nella directory $ HOME:

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

Cosa significa questo? Significa che quando si installano i rubini, verranno installati nella directory home indicata in .rbenv:

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

Ora l'installazione di brew ha fatto del lavoro che dovresti eseguire manualmente in Linux. Ad esempio, in Linux, dovresti installare ruby-build manualmente come plugin:

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

Questo è già stato fatto con l'installazione homebrew. C'è un passaggio importante che deve essere fatto nell'installazione homebrew, come nell'installazione Linux. È necessario aggiungere gli spessori rbenv al percorso. Per fare ciò, all'avvio della shell, è necessario valutare il seguente comando (che a sua volta aggiungerà gli shim rbenv all'inizio del $ PATH):

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

Ora quando corri echo $PATH, vedrai gli spessori rbenv:

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

Ora controlla la tua versione ruby ​​e rifletterà il ruby ​​rbenv installato:

ruby -v
ruby 2.6.0p0 

0

Stranamente, la versione di rbenv non ha impostato il file .rbenv Verificare con: ls -ltra -> per vedere che è stato scritto un rbenv


0

Potresti provare a usare Chruby ? chruby non si basa su spessori, invece che solo modifica PATH, GEM_HOME, GEM_PATH.


-1

Ho dimenticato di eliminare rvm prima di installare rbenv. Ho eliminato rvm e reinstallato rbenv, ma il sistema non utilizzava ancora la versione di Ruby designata come globale da rbenv. Ho provato a chiudere Terminal, ma ha funzionato solo dopo aver riavviato l'intera macchina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.