rbenv no cambia la versión de ruby


269

Instalé rbenv de acuerdo con las instrucciones de github. Estoy ejecutando OSX pero lo he intentado en una VM Ubuntu 12.04 y obtuve los mismos resultados. Lo siguiente es lo que obtengo en mi terminal cuando intento cambiar las versiones de 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

¿Alguien tiene alguna idea de por qué rbenv no está cambiando la versión ruby ​​como cree que sí? Además, no hay ningún archivo .rbenv en el directorio local que pueda causar que la versión de ruby ​​tenga un valor predeterminado de 1.8.7

rbenv local
rbenv: no local version configured for this directory

¿Definitivamente has puesto el init en tu bashrc correctamente? ¿Cómo se ve tu $ PATH?
d11wtq

Ninguno de esos comandos cambia la versión de Ruby que rbenv está usando, pero parece que no está usando su Ruby predeterminado.
Andrew Marshall

@ d11wtq fue correcto. aparentemente no estaba en mi ~ / .bash_profile correctamente.
ajorgensen

Respuestas:


519

Verifique que PATH contenga $ HOME / .rbenv / shims y $ HOME / .rbenv / bin

$ env | grep PATH

Compruebe también que tiene lo siguiente en su ~ / .bash_profile si usa bash o ~ / .zshenv si usa zsh

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

NOTA: Asegúrese de que sea la última configuración en su ~ / .bash_profile. Me encontré con un problema en el que instalé un programa que actualizó mi .bash_profile y restablecí PATH.

Finalmente, asegúrese de que su $HOMEcarpeta no tenga un .ruby-versionarchivo que pueda haber creado por accidente si lo hubiera hecho $ rbenv local <ruby-version>en su $HOMEcarpeta. Haciendo $ 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 los documentos:

Elección de la versión de Ruby Cuando ejecuta un shim, rbenv determina qué versión de Ruby usar al leerla de las siguientes fuentes, en este orden:

La variable de entorno RBENV_VERSION, si se especifica. Puede usar el comando de shell rbenv para establecer esta variable de entorno en su sesión de shell actual.

El primer archivo de versión .ruby encontrado al buscar el directorio del script que está ejecutando y cada uno de sus directorios principales hasta llegar a la raíz de su sistema de archivos.

El primer archivo de versión .ruby encontrado al buscar el directorio de trabajo actual y cada uno de sus directorios principales hasta llegar a la raíz de su sistema de archivos. Puede modificar el archivo .ruby-version en el directorio de trabajo actual con el comando local rbenv.

El archivo global ~ / .rbenv / version. Puede modificar este archivo con el comando global rbenv. Si el archivo de versión global no está presente, rbenv supone que desea utilizar el "sistema" de Ruby, es decir, cualquier versión que se ejecute si rbenv no estuviera en su camino.


34
En OSX, no olvide cerrar sesión en su sesión de OSX y luego volver a iniciarla para que los cambios en su perfil de bash surtan efecto.
Jeremy Ricketts

15
O hacer exec $SHELL -l(L inferior)
pduersteler

3
¿Dónde debo agregar "$ HOME / .rbenv / shims" y "$ HOME / .rbenv / bin"?
Benedikt

3
Hice así: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiTrabajando bastante bien :) También revise los PATH init después de la declaración rbenv.
merqlove

1
Para mi caso, necesito agregar estas dos líneas en .bashrc (Bash en Ubuntu) y luego obtuve la versión correcta de ruby. No funciona si se agrega a .bash_profile.
alexhilton

98

Lo arreglé agregando lo siguiente a mi ~ / .bash_profile:

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

Esto es lo que se documenta en https://github.com/sstephenson/rbenv .

Por lo que puedo decir, no hay un directorio ~ / .rbenv / bin, que fue mencionado en la publicación por @rodowi.


+1 para el enlace. +1 para la respuesta que contradice una respuesta mejor votada. Lo que plantea una nueva pregunta, y si alguien puede intervenir, ¿cómo puede export PATH="$HOME/.rbenv/bin:$PATHfuncionar (ya que me estaba fallando)?
Jerome

1
No habrá un ~/.rbenv/bin/si instaló a través de homebrew o linuxbrew. Y no debería tener que configurar el camino de calzas usted mismo, como rbenv inithace esto (y más) para usted .
Dennis

Esto solucionó mi problema.
Martyn Chamberlin

Esto debería estar en el
archivo

Trabajó para mí después de horas de probar otras cosas. ¡Gracias!
cjs1978

91

Esta puede ser una vieja pregunta, pero Google me llevó aquí y, por el bien de la posteridad, pensé en compartirla.

Mi problema persistió después de muchas de las soluciones recomendadas anteriormente. Al igual que el OP, instalé rbenv y luego una versión ruby, pero mi computadora portátil se ajustó al sistema. Lo que había pasado por alto fue que cuando corrí:

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

IOW, todavía estaba predeterminado en el sistema. Un rápido

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

lo cambió a la nueva versión.


77
Sí, es curioso cómo las guías de instalación de rbenv no mencionan ejecutar el comando local. Muchos blogs le recuerdan que debe ejecutar rbenv global pero no local. Gran respuesta.
Steve Midgley

El mismo problema. La misma solución (Puede que tenga que considerar enviar un RP para avisar cuando la versión global de Ruby sea anulada por una versión ~ / .ruby ...)
Mark Glossop

Tuve que deshacerme del sistema eliminando con YUM en Centos 7, solo después de eso pude ver la versión correcta seleccionada en rbenv
Joe Walker

Estoy sorprendido de haber tenido que cavar hasta aquí para obtener una respuesta, esta es la correcta para mí.
Ian Hyzy

Encontré que el comando de versiones rbenv decía que 2.3.1 fue establecido en .ruby-versiones por rvm quizás. Había dejado de usar rvm hace un tiempo y me cambié a rbenv. Suprimí las versiones .ruby y volví a ejecutar las versiones de rbenv y tenía la última seleccionada por rbenv (¡asegúrese de tener la declaración de evaluación anterior en .bash_profile!) Ahora, todo funciona como antes. Gracias por ayudarme a resolver esto.
John Wooten

45

El primer paso es averiguar qué rubí se llama:
which ruby

Tu sistema dice:
/usr/bin/ruby

Este NO es el shim utilizado por rbenv, que (en MacOS) debería verse así:
/Users/<username>/.rbenv/shims/ruby

La cuña es en realidad un script que actúa como un redireccionamiento a la versión de ruby ​​que configura.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Recomiendo que para la resolución de problemas, desactive la versión "local" específica del proyecto y la versión "shell" específica del shell y simplemente pruebe usando la configuración de versión "global" que se determina en un archivo de texto plano en ~ / .rbenv / verion solo será el número de versión "1.9.3" en su caso. Puede hacer "ls -laG" en la raíz de la carpeta de su proyecto (no en la carpeta de inicio) para asegurarse de que ya no haya un archivo ".ruby-version".

Puede usar "versiones de rbenv" para identificar qué versión está configurada para usar rbenv (y la ubicación y el nombre del archivo que está configurando eso).

rbenv versions

NINGUNO DE ESO IMPORTA: hasta que establezca el camino correctamente.

Use esto para asegurarse de que su * MacOS le obedecerá:
eval "$(rbenv init -)"

Seguido por:
which ruby

Para asegurarse de que se vea así: /Users//.rbenv/shims/ruby

Luego agregue la línea a su perfil para que se ejecute cada vez que abra una nueva ventana de terminal:
~/.bash_profile eval "$(rbenv init -)"

Hay otras formas de modificar la ruta, no dude en sustituir cualquiera de ellas en lugar de ejecutar rbenv init.

NOTA: reinstale Rails con:
gem install rails

Si estaba intentando ejecutar Ruby on Rails, primero debe tener todo esto funcionando, luego vuelva a instalar la gema de rails. Una instalación previa de Rails usará una ruta codificada al rubí incorrecto y varias otras cosas estarán en el lugar equivocado, así que solo instale la gema nuevamente.

PD: si su MacOS no le obedece (* mencionado anteriormente), entonces puede que tenga que encontrar otra forma de modificar su ruta, pero es poco probable que sea un problema porque "las Mac simplemente funcionan";)


1
Ah amigo, finalmente! Probé unas 25 soluciones diferentes antes de encontrar esta, gracias
Danny Santos

Solución bien explicada. Gracias.
Killscreen

23

Acabo de encontrar este mismo problema. Lo que hice fue desinstalar rbenv (a través de homebrew) y reinstalarlo. También agregué

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

en ~ / .bash_profile cuando reinstalé rbenv. Funciona perfectamente ahora.


1
Tenga en cuenta para otros que llegaron al mismo problema que yo: por algunas razones, qué rbenv estaba funcionando antes, por lo que esta línea nunca se ejecutó. Lo arreglé usando directamente eval "$ (rbenv init -)".
dadoonet

¡Pequeña y agradable declaración de evaluación para este caso de uso!
Killscreen

18

En mi caso, cambiar el ~/.zshenvno funcionó. Tuve que hacer los cambios adentro ~/.zshrc.

Acabo de agregar:

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

en la parte superior ~/.zshrc, reinició el shell y cerró la sesión.

Comprueba si funcionó:

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

Esto funciona perfectamente Agregué eso a .bash_profile not / zshenv.
Kang Byul

8

Ejecute este comando

Agregue rbenv a bash para que se cargue cada vez que abra una terminal

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

esto resolverá su problema Referencia


1
Pasé horas arreglando esto. Finalmente su solución ayudó. ¡¡Gracias!!
Usuario7354632781

5

Si está usando bash , vaya a

~/.bash_profile

y agregue la siguiente línea (si aún no está allí)

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

Si está utilizando Zsh, vaya a

~/.zshrc

y agregue la misma línea de código, al final del archivo .zshrc.

Luego, simplemente reinicie su terminal y debería estar bien ahora.


La gente en Mac os Catalina, debe seguir las instrucciones de zsh
Abhinay

4

rbenv help shell

"Establece una versión de Ruby específica para el shell configurando la variable de entorno 'RBENV_VERSION' en su shell. Esta versión anula las versiones específicas de aplicación local y la versión global. Debe ser una cadena que coincida con una versión de Ruby conocida por rbenv. El sistema de cadena de versión especial 'utilizará su sistema predeterminado Ruby. Ejecute las versiones de rbenv' para obtener una lista de las versiones disponibles de Ruby ".

Siempre que rbenv se haya instalado correctamente, ruby ​​-v corresponderá a

rbenv shell 1.9.3-p125


'rbenv shell xyz' es lo que funcionó para mí. El 'rbenv local xyz' descrito en la respuesta más alta clasificada arriba no funcionó en OS X.
Jeremy Rea

4

En cuanto a mí la forma más fácil de usar rbenv, junto con zshes la adición rbenva la sección de plugins en .zshrcconfig. En mi caso se parece 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)

Después de eso no hay problemas al instalar, cambiar, usar versiones de ruby ​​con ayuda de rbenv.

Recuerde reiniciar su sesión de terminal después de realizar cambios.


4

Tuve el mismo problema, pero causado por 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 alguna manera, también instalé Ruby a través de Homebrew, y la ruta Homebrew estaba por delante de la ruta rbenv en mi $PATH. Correr lo brew uninstall rubyarregló para mí.


4

correr:

rbenv init

Después de ejecutar eso, cuando configuré mi versión rbenv local:

rbenv local 2.4.0

entonces mi ruby -vy mis rbenv localversiones coincidieron.

Nota: También es posible que desee salir del directorio en el que se encuentra y luego volver a entrar en él, me di cuenta de que era necesario para que las cosas funcionen.


3

Llegué al mismo problema. Se corrigió esto ejecutando el comando "rbenv global" con "sudo". Creo que fue algo problema de permiso.

Actualización: finalmente encontré la solución. Había una misma "versión" de archivo en mi Mac, que está en "/usr/local/Cellar/rbenv/0.3.0/". Creo que fue creado por error ocasionalmente. deberías eliminarlo.


3

Cuando tuve estos síntomas, el problema resultó ser que la instalación había fallado a la mitad de la nueva versión de Ruby a la que estaba tratando de cambiar, sin que me diera cuenta. La solución fue eliminarlo y reinstalarlo.

(Esto significaba que aunque ruby ​​1.9.3 apareció en la lista de versiones disponibles de rbenv, no tenía un ejecutable en la ruta donde rbenv asumió que lo haría. Dado que rbenv intenta cambiar su versión de ruby ​​simplemente anteponiendo una ubicación a su ruta, si realmente no hay nada en la ubicación que le corresponde, su sistema operativo continuará buscando su ruta predeterminada y encontrará la versión de su sistema, en mi caso, como la pregunta 1.8.7.)


3

para usuarios de conchas de pescado

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

2

Esto me sucedió justo después de reinstalar rbenv. Aparentemente tenía un .ruby-versionarchivo en mi directorio de inicio, especificando una versión que ya no existía. Una vez que eliminé el archivo, todo funcionó.


2

Asegúrese de que la última línea de su .bash_profilees:

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

1

La respuesta aceptada sugiere agregar lo siguiente:

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

Esto no funcionará en Mac OSX, que hace referencia el OP. De hecho, si instala rbenv a través debrew install rbenv , que es realmente el único método de instalación en Mac OSX, ya curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashque FALLARÁ en OSX, entonces el ejecutable de rbenv se instalará en:

$ which rbenv
/usr/local/bin/rbenv

Sin embargo, incluso en OSX, la raíz rbenv permanecerá en el directorio $ HOME:

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

¿Qué significa esto? Significa que cuando instales rubíes, se instalarán en el directorio de inicio dado en .rbenv:

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

Ahora la instalación de la cerveza hizo un trabajo que tendrías que realizar manualmente en Linux. Por ejemplo, en Linux, tendría que instalar ruby-build manualmente como complemento:

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

Esto ya está hecho con la instalación de homebrew. Hay un paso importante que debe hacerse en la instalación de homebrew, como en la instalación de Linux. Debe agregar las cuñas rbenv a su camino. Para hacer eso, cuando se inicia su shell, debe evaluar el siguiente comando (que a su vez agregará las cuñas rbenv al comienzo de su $ PATH):

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

Ahora cuando corras echo $PATH, verás las cuñas rbenv:

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

Ahora verifique su versión de ruby ​​y reflejará el rbenv ruby ​​instalado:

ruby -v
ruby 2.6.0p0 

0

Curiosamente, la versión rbenv no configuró el archivo .rbenv. Consulte con: ls -ltra -> para ver que se escribió un rbenv


0

¿Podrías intentar usar chruby ? chruby no se basa en cuñas, sino que sólo modifica PATH, GEM_HOME, GEM_PATH.


-1

Olvidé eliminar rvm antes de instalar rbenv. Eliminé rvm y reinstalé rbenv, pero el sistema todavía no estaba usando la versión de Ruby que rbenv designaba como global. Intenté cerrar la Terminal, pero solo funcionó una vez que reinicié toda la máquina.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.