rbenv não muda a versão do ruby

269

Eu instalei o rbenv de acordo com as instruções do github. Estou executando o OSX, mas tentei isso em uma VM Ubuntu 12.04 e obtive os mesmos resultados. A seguir, é o que recebo no meu terminal quando tento alterar as versões do 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

Alguém tem alguma idéia de por que o rbenv não está mudando a versão ruby ​​como ela pensa? Além disso, não há um arquivo .rbenv no diretório local que faria com que a versão ruby ​​tivesse como padrão 1.8.7

rbenv local
rbenv: no local version configured for this directory
ajorgensen
fonte
Você definitivamente colocou o init no seu bashrc corretamente? Como é o seu $ PATH?
precisa saber é o seguinte
Nenhum desses comandos altera a versão do Ruby que o rbenv está usando, mas parece que não está usando o Ruby padrão.
Andrew Marshall
@ d11wtq estava correto. aparentemente não estava no meu ~ / .bash_profile corretamente.
precisa saber é o seguinte

Respostas:

519

Verifique se PATH contém $ HOME / .rbenv / shims e $ HOME / .rbenv / bin

$ env | grep PATH

Verifique também se você possui o seguinte em seu ~ / .bash_profile se estiver usando o bash ou ~ / .zshenv se estiver usando o zsh

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

NOTA: Verifique se é a última configuração no seu ~ / .bash_profile. Corri para um problema em que instalei um programa que atualizava meu .bash_profile e redefinia o PATH.

Finalmente, certifique-se a sua $HOMEpasta não tem um .ruby-versionarquivo que você pode ter criado por acidente se você fosse ter feito $ rbenv local <ruby-version>em sua $HOMEpasta. Fazendo $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / versão file, and the existence of a.ruby versão file in the$ HOME folder would override the version set by$ HOME / .rbenv / version`.

Dos documentos:

Escolhendo a versão Ruby Ao executar um shim, o rbenv determina qual versão Ruby usar, lendo-a das seguintes fontes, nesta ordem:

A variável de ambiente RBENV_VERSION, se especificada. Você pode usar o comando rbenv shell para definir essa variável de ambiente na sua sessão atual do shell.

O primeiro arquivo da versão .ruby encontrado pesquisando o diretório do script que você está executando e cada um de seus diretórios pai até atingir a raiz do seu sistema de arquivos.

O primeiro arquivo da versão .ruby encontrado pesquisando o diretório de trabalho atual e cada um de seus diretórios pai até atingir a raiz do seu sistema de arquivos. Você pode modificar o arquivo .ruby-version no diretório de trabalho atual com o comando local rbenv.

O arquivo ~ / .rbenv / version global. Você pode modificar este arquivo usando o comando global rbenv. Se o arquivo da versão global não estiver presente, o rbenv assume que você deseja usar o Ruby "system" - ou seja, qualquer versão seria executada se o rbenv não estivesse no seu caminho.

defvol
fonte
34
No OSX, não se esqueça de sair da sessão do OSX e depois fazer login novamente para que as alterações no seu perfil do bash sejam efetivadas.
precisa
15
Ou faça exec $SHELL -l(L inferior)
pduersteler
3
Onde devo adicionar os "$ HOME / .rbenv / shims" e "$ HOME / .rbenv / bin"?
Benedikt
3
Eu fiz assim: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiTrabalhando muito bem :) Verifique também se há PATH init após a declaração rbenv.
merqlove
1
No meu caso, preciso anexar essas duas linhas no .bashrc (Bash no Ubuntu) e, em seguida, obtive a versão correta do ruby. Não funciona se o anexar em .bash_profile.
alexhilton
98

Corrigi isso adicionando o seguinte ao meu ~ / .bash_profile:

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

É o que está documentado em https://github.com/sstephenson/rbenv .

Pelo que sei, não há diretório ~ / .rbenv / bin, mencionado no post por @rodowi.

mjmdavis
fonte
+1 para o link. +1 para a resposta que contradiz uma resposta melhor votada. O que levanta uma questão adicional - e se alguém pode entrar - como pode export PATH="$HOME/.rbenv/bin:$PATHfuncionar (como estava falhando para mim)?
21416 Jerome
1
Não haverá um ~/.rbenv/bin/se você instalou via homebrew ou linuxbrew. E você não deve ter que configurar o caminho dos calços por conta própria, como rbenv initfaz isso (e mais) para você .
Dennis
Isso corrigiu meu problema.
precisa saber é o seguinte
Esta deve ser no README
onmyway133
Trabalhou para mim depois de horas tentando outras coisas. Obrigado!
precisa saber é o seguinte
91

Essa pode ser uma pergunta antiga, mas o Google me levou até aqui e, por uma questão de posteridade, achou que eu iria compartilhar.

Meu problema persistiu após muitas das soluções recomendadas acima. Como o OP, instalei o rbenv e, em seguida, uma versão em rubi, mas meu laptop assumiu o padrão de sistema. O que eu tinha esquecido era que quando eu corri:

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

IOW, ainda estava em falta no sistema. Um rápido

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

mudou para a nova versão.

alphadogg
fonte
7
Sim - engraçado como os guias de instalação do rbenv não mencionam a execução do comando local. Muitos blogs lembram você de executar o rbenv global, mas não local. Ótima resposta.
precisa
Mesmo problema. A mesma solução. (Pode ter que olhar para a apresentação de um PR para aconselhar quando versão global Ruby está anulada por ~ / .ruby-version ...)
Mark Glossop
Eu tinha que se livrar do sistema removendo com YUM no Centos 7, só depois que eu pudesse ver a versão correta selecionada no rbenv
Joe Walker
Estou chocado por ter que cavar até aqui para obter uma resposta, esta é a correta para mim.
Ian Hyzy 25/02/19
Eu descobri que o comando rbenv version disse que a 2.3.1 foi definida em .ruby-versions pelo rvm, talvez. Eu parei de usar o rvm há algum tempo e mudei para rbenv. Excluiu versões .ruby e executou as versões rbenv novamente e a última foi selecionada por rbenv (certifique-se de ter a instrução eval acima em .bash_profile!). Agora, tudo funciona como antes. Obrigado por me ajudar a resolver isso.
John Wooten
45

O primeiro passo é descobrir qual ruby ​​está sendo chamado:
which ruby

Seu sistema diz:
/usr/bin/ruby

Este NÃO é o shim usado pelo rbenv, que (no MacOS) deve se parecer com:
/Users/<username>/.rbenv/shims/ruby

O shim é na verdade um script que age como um redirecionamento para a versão do ruby ​​que você define.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Eu recomendo que, para solucionar problemas, desmarque a versão "local" específica do projeto e a versão "shell" específica do shell e apenas teste usando a configuração da versão "global", que é determinada em um arquivo de texto sem formatação em ~ / .rbenv / verion, que será apenas o número da versão "1.9.3" no seu caso. Você pode executar "ls -laG" na raiz da pasta do projeto (não na pasta inicial) para garantir que não exista mais um arquivo ".ruby-version".

Você pode usar "versões rbenv" para identificar qual versão rbenv está configurada para uso (e o local e o nome do arquivo que está definindo isso).

rbenv versions

NENHUM ASSUNTO IMPORTA: até você definir o caminho corretamente.

Use isto para garantir que o seu * MacOS o obedeça:
eval "$(rbenv init -)"

Seguido por:
which ruby

Para garantir que ele se pareça com: /Users//.rbenv/shims/ruby

Em seguida, adicione a linha ao seu perfil para que seja executada toda vez que você abrir uma nova janela do terminal:
~/.bash_profile eval "$(rbenv init -)"

Existem outras maneiras de modificar o caminho, fique à vontade para substituí-las em vez de executar o init rbenv.

NOTA: reinstale o Rails com:
gem install rails

Se você estava tentando rodar o Ruby on Rails, precisa ter tudo isso funcionando primeiro, depois instale a gema do rails novamente. Uma instalação anterior do Rails usará um caminho codificado para o ruby ​​errado e várias outras coisas estarão no lugar errado; portanto, basta instalar o gem novamente.

PS Se o seu MacOS não lhe obedecer (* mencionado acima), talvez seja necessário encontrar outra maneira de modificar seu caminho, mas é improvável que seja um problema porque "Macs simplesmente funcionam";)

Sky Notify
fonte
1
Ah companheiro, finalmente! Tentou cerca de 25 soluções diferentes antes de encontrar um presente, obrigado
Danny Santos
Solução bem explicada. Obrigado.
killscreen 19/03
23

Acabei de encontrar esse mesmo problema. O que fiz foi desinstalar o rbenv (via homebrew) e reinstalá-lo. Eu também adicionei

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

em ~ / .bash_profile quando eu reinstalei o rbenv. Funciona perfeitamente agora.

Neal
fonte
1
Nota para outras pessoas que vieram com o mesmo problema que eu: Por algumas razões, o rbenv estava trabalhando antes, para que essa linha nunca fosse executada. Corrigi-o usando diretamente eval "$ (rbenv init -)".
precisa saber é o seguinte
Pequena declaração de avaliação agradável para este caso de uso!
killscreen 19/03
18

No meu caso, alterar o ~/.zshenvnão funcionou. Eu tive que fazer as mudanças lá dentro ~/.zshrc.

Acabei de adicionar:

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

no topo ~/.zshrc, reiniciou o shell e efetuou logout.

Verifique se funcionou:

  ~ 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
fonte
Isso funciona perfeitamente. Eu adicionei isso no .bash_profile não / zshenv.
Kang Byul 28/01
8

Execute este comando

Adicione rbenv ao bash para que ele seja carregado toda vez que você abrir um terminal

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

isso vai resolver o seu problema de Referência

Singhak
fonte
1
Passei horas para consertar isso. Finalmente, sua solução ajudou. Obrigado!!
User7354632781
5

Se você estiver usando o bash , vá para

~/.bash_profile

e adicione a seguinte linha (se ainda não estiver lá)

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

Se você estiver usando o Zsh, vá para

~/.zshrc

e adicione a mesma linha de código, no final do arquivo .zshrc.

Em seguida, basta reiniciar o seu terminal e deve estar tudo bem agora.

drjorgepolanco
fonte
Pessoas no Mac OS Catalina, deve seguir as instruções zsh
Abhinay
4

rbenv help shell

"Define uma versão Ruby específica do shell, configurando a variável de ambiente 'RBENV_VERSION' no seu shell. Esta versão substitui as versões específicas do aplicativo local e a versão global. Deve ser uma string que corresponda à versão Ruby conhecida pelo rbenv. 'usará o Ruby do sistema padrão. Execute as versões rbenv' para obter uma lista das versões disponíveis do Ruby. "

Desde que o rbenv tenha sido instalado corretamente, o ruby ​​-v corresponderá a

rbenv shell 1.9.3-p125

htmldrum
fonte
'rbenv shell xyz' é o que funcionou para mim. O 'rbenv local xyz' descrito na resposta mais alta classificada acima não funcionou no OS X.
Jeremy Rea
4

Quanto a mim a maneira mais fácil de usar rbenvjunto com zshestá adicionando rbenva seção de plugins na .zshrcconfiguração. No meu caso, é semelhante 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)

Depois disso, não há problemas ao instalar, alternar, usar versões ruby ​​com a ajuda de rbenv.

Lembre-se de reiniciar a sessão do terminal após fazer as alterações.

Raiz V.
fonte
4

Eu tive o mesmo problema, mas causado pelo 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

De alguma forma, eu também instalei o Ruby via Homebrew, e o caminho do Homebrew estava à frente do caminho rbenv no meu $PATH. Correndo brew uninstall rubyconsertou para mim.

djb
fonte
4

corre:

rbenv init

Depois de executar isso, quando defino minha versão local do rbenv:

rbenv local 2.4.0

então minhas ruby -ve minhas rbenv localversões coincidiram.

Nota: Você também pode querer sair do diretório em que está e depois voltar para ele. Percebi que isso era necessário para que eu fizesse as coisas funcionarem.

AmitF
fonte
3

Eu vim para o mesmo problema. Corrigido isso executando o comando "rbenv global" com "sudo". Eu acho que era algo problema de permissão.

atualização: finalmente encontrei a solução. Havia um mesmo arquivo "version" no meu mac, que está em "/usr/local/Cellar/rbenv/0.3.0/". Eu acho que foi criado por engano ocasionalmente. você deve removê-lo.

Vincent
fonte
3

Quando tive esses sintomas, o problema foi que a instalação falhou no meio da nova versão do Ruby para a qual eu estava tentando mudar, sem que eu percebesse. A correção foi para excluí-lo e reinstalá-lo.

(Isso significava que, embora o ruby ​​1.9.3 tenha aparecido na lista rbenv de versões disponíveis, ele não tinha um executável no caminho em que o rbenv supunha que sim. Como o rbenv tenta alterar sua versão do ruby, basta colocar um local para seu caminho, se não houver nada no local que ele precede, seu sistema operacional continuará procurando o caminho padrão e encontrará a versão do sistema, no meu caso, como o da pergunta 1.8.7.)

David
fonte
3

para usuário de casca de peixe

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

Isso aconteceu comigo logo após a reinstalação rbenv. Aparentemente, eu tinha um .ruby-versionarquivo no meu diretório pessoal, especificando uma versão que não existia mais. Depois de excluir o arquivo, tudo funcionou.

John K. Chow
fonte
2

Verifique se a última linha do seu .bash_profileé:

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

A resposta aceita sugere adicionar o seguinte:

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

Isso não funcionará no Mac OSX, ao qual o OP faz referência. De fato, se você instalar o rbenv via brew install rbenv, que é realmente o único método de instalação no Mac OSX, pois curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashFAIL no OSX, o executável rbenv será instalado em:

$ which rbenv
/usr/local/bin/rbenv

No entanto, mesmo no OSX, a raiz rbenv permanecerá no diretório $ HOME:

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

O que isto significa? Isso significa que, quando você instala rubis, eles serão instalados no diretório inicial fornecido em .rbenv:

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

Agora a instalação do brew fez algum trabalho que você precisaria executar manualmente no Linux. Por exemplo, no Linux, você teria que instalar o ruby-build manualmente como um plug-in:

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

Isso já foi feito com a instalação do homebrew. Há uma etapa importante que deve ser executada na instalação do homebrew, como na instalação do Linux. Você deve adicionar os calços rbenv ao seu caminho. Para fazer isso, quando o shell iniciar, você deverá avaliar o seguinte comando (que por sua vez adicionará os calços rbenv ao início do seu $ PATH):

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

Agora, quando você executar echo $PATH, você verá os calços rbenv:

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

Agora verifique sua versão do ruby ​​e ela refletirá o rbenv ruby ​​instalado:

ruby -v
ruby 2.6.0p0 
Donato
fonte
0

Estranhamente, a versão rbenv não definiu o arquivo .rbenv Verifique com: ls -ltra -> para ver se um rbenv foi gravado

poseid
fonte
0

Você pode tentar usar o chruby ? não chruby não contar com calços, em vez disso, apenas modifica PATH, GEM_HOME, GEM_PATH.

pós-moderno
fonte
-1

Esqueci de excluir o rvm antes de instalar o rbenv. Excluí o rvm e reinstalei o rbenv, mas o sistema ainda não estava usando a versão do Ruby sendo designada como global pelo rbenv. Tentei fechar o Terminal, mas só funcionou quando reiniciei a máquina inteira.

ajain
fonte