rbenv не меняет версию ruby


269

Я установил rbenv в соответствии с инструкциями github. Я использую OSX, но я попробовал это на виртуальной машине Ubuntu 12.04 и получил те же результаты. Вот что я получаю в своем терминале, когда пытаюсь сменить версию 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

У кого-нибудь есть идеи относительно того, почему rbenv не переключает версию ruby, как она думает? Также в локальном каталоге нет файла .rbenv, из-за которого версия ruby ​​по умолчанию будет иметь версию 1.8.7.

rbenv local
rbenv: no local version configured for this directory

Вы определенно правильно поставили init в своем bashrc? Как выглядит ваш $ PATH?
d11wtq

Ни одна из этих команд не меняет версию Ruby, которую использует rbenv, но, похоже, она не использует ваш Ruby по умолчанию.
Эндрю Маршалл

@ d11wtq было правильно. это не было в моем ~ / .bash_profile правильно, по-видимому.
ajorgensen

Ответы:


520

Убедитесь, что PATH содержит $ HOME / .rbenv / shims и $ HOME / .rbenv / bin

$ env | grep PATH

Также убедитесь, что в вашем ~ / .bash_profile есть следующее при использовании bash или ~ / .zshenv при использовании zsh

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

ПРИМЕЧАНИЕ. Убедитесь, что это последний параметр в вашем ~ / .bash_profile. Я столкнулся с проблемой, когда я установил программу, которая обновила мой файл .bash_profile и сбросил PATH.

Наконец, убедитесь, что в вашей $HOMEпапке нет .ruby-versionфайла, который вы могли создать случайно, если бы вы сделали это $ rbenv local <ruby-version>в своей $HOMEпапке. Делаем $ 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`.

Из документов:

Выбор версии Ruby Когда вы выполняете shim, rbenv определяет, какую версию Ruby использовать, читая ее из следующих источников, в следующем порядке:

Переменная среды RBENV_VERSION, если указана. Вы можете использовать команду оболочки rbenv для установки этой переменной среды в текущем сеансе оболочки.

Первый файл .ruby-version, найденный путем поиска в каталоге исполняемого скрипта и в каждом из его родительских каталогов до достижения корня вашей файловой системы.

Первый файл .ruby-version, найденный путем поиска в текущем рабочем каталоге и в каждом из его родительских каталогов до достижения корня вашей файловой системы. Вы можете изменить файл .ruby-version в текущем рабочем каталоге с помощью локальной команды rbenv.

Глобальный файл ~ / .rbenv / version. Вы можете изменить этот файл с помощью глобальной команды rbenv. Если файл глобальной версии отсутствует, rbenv предполагает, что вы хотите использовать «системный» Ruby - то есть, какую бы версию не запускали, если rbenv не было на вашем пути.


34
В OSX не забудьте выйти из сеанса OSX, а затем снова войти, чтобы изменения в вашем профиле bash вступили в силу.
Джереми Рикеттс

15
Или сделать exec $SHELL -l(нижний L)
pduersteler

3
Куда мне добавить «$ HOME / .rbenv / shims» и «$ HOME / .rbenv / bin»?
Бенедикт

3
Я сделал так: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiРаботая довольно хорошо :) Также проверьте PATH inits после объявления rbenv.
Merqlove

1
Для моего случая мне нужно добавить эти две строки в .bashrc (Bash в Ubuntu), а затем я получил правильную версию ruby. Это не работает, если добавить его в .bash_profile.
Алексхилтон

98

Я исправил это, добавив следующее в мой ~ / .bash_profile:

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

Это то, что задокументировано на https://github.com/sstephenson/rbenv .

Из того, что я могу сказать, нет каталога ~ / .rbenv / bin, о котором упоминал в сообщении @rodowi.


+1 за ссылку. +1 за ответ, который противоречит лучшему. Что поднимает еще один вопрос - и если кто-то может вмешаться - как может export PATH="$HOME/.rbenv/bin:$PATHработать (как это не получилось для меня)?
Джером

1
Не будет, ~/.rbenv/bin/если вы установили через homebrew или linuxbrew. И вам не нужно самим устанавливать путь прокладок, как rbenv initэто (и многое другое) для вас .
Деннис

Это исправило мою проблему.
Мартын Чемберлин

Это должно быть в README
onmyway133

Работал для меня после нескольких часов, пытаясь другие вещи. Спасибо!
cjs1978

91

Это может быть старый вопрос, но Google привел меня сюда и ради потомства подумал, что я поделюсь.

Моя проблема сохранилась после многих из рекомендуемых решений выше. Как и OP, я установил rbenv, а затем версию ruby, но мой ноутбук по умолчанию подключился к системе. Что я упустил из виду, так это то, что когда я бежал:

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

IOW, это было все еще по умолчанию для системы. Быстрый

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

переключил его на новую версию.


7
Да - забавно, как в руководствах по установке rbenv вообще не упоминается о запуске локальной команды. Многие блоги напоминают вам запускать rbenv глобально, но не локально. Отличный ответ.
Стив Мидгли

Та же проблема. То же решение. (Возможно, придется посмотреть на подачу PR, чтобы сообщить, когда глобальная версия Ruby отменяется ~ / .ruby-версией ...)
Марк Глоссоп

Мне пришлось избавиться от системы, удалив с помощью YUM в Centos 7, только после этого я смог увидеть правильную версию, выбранную в rbenv
Джо Уокер

Я в шоке, я должен был копать так далеко, чтобы получить ответ, это правильный вопрос для меня.
Ян Хизи

Я обнаружил, что команда версий rbenv говорит, что 2.3.1 был установлен в .ruby-версиях, возможно, rvm. Я перестал использовать rvm некоторое время назад и перешел на rbenv. Удалил .ruby-версии и снова запустил версии rbenv, а последняя выбрала rbenv (убедитесь, что в .bash_profile указан оператор eval!). Теперь все работает как раньше. Спасибо, что помогли мне решить эту проблему.
Джон Вутен

45

Первый шаг - выяснить, какой рубин вызывается:
which ruby

Ваша система говорит:
/usr/bin/ruby

Это НЕ оболочка, используемая rbenv, которая (на MacOS) должна выглядеть так:
/Users/<username>/.rbenv/shims/ruby

На самом деле shim - это скрипт, который действует как перенаправление на установленную вами версию ruby.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Я рекомендую, чтобы при устранении неполадок вы сбрасывали конкретную «локальную» версию проекта и конкретную версию «оболочки» для оболочки и просто тестировали, используя настройку «глобальной» версии, которая определяется в виде простого текстового файла в ~ / .rbenv / verion, который просто будет номер версии "1.9.3" в вашем случае. Вы можете выполнить команду «ls -laG» в корне папки вашего проекта (не домашней папки), чтобы убедиться, что там больше нет файла «.ruby-version».

Вы можете использовать «версии rbenv», чтобы определить, какая версия rbenv установлена ​​для использования (а также расположение и имя файла, который ее устанавливает).

rbenv versions

Ничего из этого: пока вы не установите правильный путь.

Используйте это, чтобы убедиться, что ваш * MacOS будет подчиняться вам:
eval "$(rbenv init -)"

С последующим:
which ruby

Чтобы убедиться, что это выглядит так: /Users//.rbenv/shims/ruby

Затем добавьте строку в свой профиль, чтобы она запускалась каждый раз, когда вы открываете новое окно терминала:
~/.bash_profile eval "$(rbenv init -)"

Есть другие способы изменить путь, не стесняйтесь заменить любой из них вместо запуска init rbenv.

ПРИМЕЧАНИЕ: переустановите Rails с помощью:
gem install rails

Если вы пытались запустить Ruby on Rails, то сначала нужно, чтобы все это работало, а затем снова установить гем rails. Предыдущая версия Rails будет использовать жестко заданный путь к неправильному рубину, и некоторые другие вещи будут в неправильном месте, поэтому просто установите гем снова.

PS Если ваш MacOS не подчиняется вам (* упомянутый выше), то вам, возможно, придется найти другой способ изменить свой путь, но это вряд ли будет проблемой, потому что «Mac просто работают»;)


1
Ах, приятель, наконец-то! Пробовал около 25 различных решений, прежде чем я нашел это, спасибо
Дэнни Сантос

Хорошо объясненное решение. Спасибо.
killscreen

23

Я только что нашел эту же проблему. Что я сделал, так это удалил rbenv (через homebrew) и переустановил его. Я также добавил

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

в ~ / .bash_profile, когда я переустанавливал rbenv. Работает отлично сейчас.


1
Примечание для других, которые столкнулись с той же проблемой, что и я: по некоторым причинам, которые rbenv работал ранее, поэтому эта строка никогда не выполнялась. Я исправил это, используя непосредственно eval "$ (rbenv init -)".
dadoonet

Хорошее небольшое заявление для этого варианта использования!
killscreen

18

В моем случае изменение ~/.zshenvне сработало. Я должен был сделать изменения внутри ~/.zshrc.

Я только добавил:

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

на вершине ~/.zshrc , перезапустил оболочку и вышел из системы.

Проверьте, сработало ли это:

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

Это прекрасно работает. Я добавил, что в .bash_profile нет / zshenv.
Кан Бюль

8

Запустите эту команду

Добавьте rbenv в bash, чтобы он загружался каждый раз, когда вы открываете терминал

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

это решит вашу проблему Ссылка


1
Я потратил часы, чтобы это исправить. Наконец-то ваше решение помогло. Спасибо!!
Пользователь7354632781

5

Если вы используете Bash , перейдите к

~/.bash_profile

и добавьте следующую строку (если ее там еще нет)

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

Если вы используете Zsh, перейдите к

~/.zshrc

и добавьте ту же строку кода в конец файла .zshrc.

Затем просто перезапустите свой терминал, и теперь все должно быть в порядке.


Люди на Mac OS Каталина, должны следовать ЗШ инструкции
Абхинай

4

rbenv help shell

"Устанавливает специфичную для оболочки версию Ruby, устанавливая переменную среды 'RBENV_VERSION' в вашей оболочке. Эта версия переопределяет локальные версии приложений и глобальную версию. Должна быть строкой, соответствующей версии Ruby, известной системе rbenv. Строка специальной версии ' 'будет использовать вашу стандартную систему Ruby. Запустите версии rbenv' для получения списка доступных версий Ruby. "

Если rbenv установлен правильно, ruby ​​-v будет соответствовать

rbenv shell 1.9.3-p125


'rbenv shell xyz' - это то, что сработало для меня. «Rbenv local xyz», описанный в ответе с более высоким рейтингом выше, не работал на OS X.
Джереми Ри

4

Что касается меня самый простой способ использования rbenvвместе с zshдобавляет rbenvк плагинов раздела в .zshrcконфигурации. В моем случае это выглядит примерно так:

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

После этого не возникает проблем при установке, переключении, использовании версий ruby ​​с помощью rbenv.

Не забудьте перезапустить сеанс терминала после внесенных изменений.


4

У меня была такая же проблема, но вызванная 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

Каким-то образом я также установил Ruby через Homebrew, и путь Homebrew был впереди пути rbenv в моем $PATH. Бег brew uninstall rubyисправил это для меня.


4

бегать:

rbenv init

После того, как я запустил это, когда я установил свою локальную версию rbenv:

rbenv local 2.4.0

тогда мой ruby -vи мойrbenv local версии совпали.

Примечание. Возможно, вы также захотите выйти из каталога, в котором вы находитесь, и затем вернуться в него. Я заметил, что это было необходимо для того, чтобы все заработало.


3

Я пришел к той же проблеме. Исправлено, запустив команду "rbenv global" с "sudo". Я думаю, что это была проблема с разрешением.

обновление: я наконец нашел решение. На моем Mac была одна и та же файловая «версия», которая находится в «/usr/local/Cellar/rbenv/0.3.0/». Я думаю, что это было случайно создано случайно. Вы должны удалить это.


3

Когда у меня появились эти симптомы, проблема заключалась в том, что установка не удалась на полпути для новой версии Ruby, на которую я пытался перейти, без моего ведома. Исправление было удалить и переустановить.

(Это означало, что хотя ruby ​​1.9.3 был обнаружен в списке доступных версий rbenv, у него не было исполняемого файла на пути, где rbenv предполагал, что это будет. Так как rbenv пытается изменить вашу версию ruby, просто добавив местоположение к ваш путь, если на самом деле нет ничего в месте, где он находится, ваша ОС с радостью продолжит поиск пути по умолчанию и найдет версию вашей системы, в моем случае, как вопрос 1.8.7.)



2

Это случилось со мной сразу после переустановки rbenv. Очевидно, у меня был .ruby-versionфайл в моем домашнем каталоге, указывающий версию, которая больше не существовала. Как только я удалил файл, все заработало.


2

Убедитесь, что последняя строка вашего .bash_profile:

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

1

Принятый ответ предлагает добавить следующее:

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

Это не будет работать на Mac OSX, на который ссылается OP. Фактически, если вы устанавливаете rbenv через brew install rbenv, который на самом деле является единственным методом установки в Mac OSX, поскольку curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashв ОС OSX произойдет сбой, тогда исполняемый файл rbenv будет установлен в:

$ which rbenv
/usr/local/bin/rbenv

Однако даже в OSX корень rbenv останется в каталоге $ HOME:

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

Что это значит? Это означает, что когда вы устанавливаете рубины, они будут установлены в заданном домашнем каталоге в .rbenv:

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

Теперь установка brew выполнила некоторую работу, которую вам пришлось бы выполнить вручную в Linux. Например, в Linux вам нужно будет установить ruby-build вручную как плагин:

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

Это уже сделано с установкой доморощенного. Есть один важный шаг, который должен быть сделан при установке homebrew, как при установке Linux. Вы должны добавить прокладки rbenv на свой путь. Чтобы сделать это, при запуске вашей оболочки вы должны выполнить следующую команду (которая, в свою очередь, добавит прокладки rbenv в начало вашей переменной $ PATH):

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

Теперь, когда вы бежите echo $PATH, вы увидите прокладки rbenv:

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

Теперь проверьте вашу версию ruby, и она будет отражать установленный rbenv ruby:

ruby -v
ruby 2.6.0p0 

0

Как ни странно, версия rbenv не установила файл .rbenv. Проверьте с помощью: ls -ltra -> чтобы увидеть, что был написан rbenv.



-1

Я забыл удалить rvm перед установкой rbenv. Я удалил rvm и переустановил rbenv, но система по-прежнему не использовала версию Ruby, обозначенную rbenv как глобальная. Я попытался закрыть Терминал, но это сработало только после перезапуска всей машины.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.