rbenv не змінює рубінову версію


268

Я встановив rbenv відповідно до вказівок github. Я запускаю OSX, але я спробував це на Ubuntu 12.04 VM і отримав ті ж результати. Далі, що я отримую в своєму терміналі, коли намагаюся змінити версії рубіну:

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 не перемикає рубінову версію, як вважає, що це? Також у локальному каталозі відсутній файл .rbenv, який би спричинив за замовчуванням версію ruby ​​до версії 1.8.7

rbenv local
rbenv: no local version configured for this directory

Ви точно поставили ініт у вашому башерку правильно? Як виглядає ваш $ PATH?
d11wtq

Жодна з цих команд не змінює версію Ruby, яку використовує rbenv, але, здається, вона не використовує стандартну Ruby.
Ендрю Маршалл

@ d11wtq був правильним. в моєму ~ / .bash_profile, мабуть, правильно.
ajorgensen

Відповіді:


518

Перевірте, чи 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 / версія file, and the existence of a.ruby-версія file in the$ HOME folder would override the version set by$ HOME / .rbenv / версія`.

З документів:

Вибір версії Ruby Коли ви виконуєте shim, rbenv визначає, яку версію Ruby використовувати, читаючи її з наступних джерел, у такому порядку:

Змінна середовища RBENV_VERSION, якщо вона вказана. Ви можете використовувати команду оболонки rbenv, щоб встановити цю змінну середовища в поточному сеансі оболонки.

Перший файл .ruby-версії, знайдений шляхом пошуку в каталозі сценарію, який ви виконуєте, і в кожному з його батьківських каталогів до досягнення кореня вашої файлової системи.

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

Глобальний файл ~ / .rbenv / версії. Ви можете змінити цей файл за допомогою глобальної команди rbenv. Якщо файл глобальної версії відсутній, rbenv припускає, що ви хочете використовувати "системний" Ruby - тобто будь-яку версію, яку виконували б, якби rbenv не був на вашому шляху.


34
У OSX не забудьте вийти з сеансу OSX, а потім увійдіть назад, щоб зміни в вашому баш-профілі набули чинності.
Джеремі Рікеттс

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 init після оголошення rbenv.
merqlove

1
Для мого випадку мені потрібно додати ці два рядки до .bashrc (Bash в Ubuntu), і тоді я отримав правильну версію рубіну. Він не працює, якщо додати його до .bash_profile.
alexhilton

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/якщо ви встановили з допомогою доморощеного або linuxbrew. І вам не доведеться самостійно налаштовувати шлях до shims, як rbenv initце робиться для вас (і більше) .
Денніс

Це вирішило мою проблему.
Мартін Чемберлін

Це має бути у
ПОЧТАНІ

Працював для мене після годин спроб інших речей. Дякую!
cjs1978

91

Це може бути давнє питання, але Google привів мене сюди і, заради нащадків, подумав, що поділюсь.

Моя проблема зберігалася після багатьох рекомендованих вище рішень. Як і в ОП, я встановив rbenv, а потім рубінову версію, але мій ноутбук за замовчуванням перейшов у систему. Що я не помітив, що коли я бігав:

[~/.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
Joe Walker

Я в шоці, що мені довелося копати так далеко, щоб відповісти, це для мене правильне.
Ian Hyzy

Я виявив, що команда версій rbenv сказала, що 2.3.1 встановлено в .ruby-версіях, можливо, rvm. Я перестав користуватися rvm деякий час тому і змінився на rbenv. Видалено .ruby-версії та запустив rbenv версії знову, і в ньому було вибрано останню, вибрану rbenv (будьте впевнені, що у вас є заява eval вище в .bash_profile!). Зараз все працює як раніше. Дякуємо, що допомогли мені вирішити це.
Джон Вутен

45

Перший крок - з’ясувати, який рубін викликається:
which ruby

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

Це НЕ лайка, яку використовує rbenv, яка (на MacOS) повинна виглядати так:
/Users/<username>/.rbenv/shims/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 -)"

Є й інші способи змінити шлях, не соромтеся замінити будь-який з них замість запуску rbenv init.

ПРИМІТКА: перевстановіть Rails за допомогою:
gem install rails

Якщо ви намагалися запустити Ruby на Rails, то вам потрібно спочатку все це працювати, а потім знову встановити дорогоцінний камінь. Попередня установка Rails використовує важко закодований шлях до неправильного рубіна, а кілька інших речей опиняться в неправильному місці, тому просто встановіть дорогоцінний камінь ще раз.

PS Якщо ваш MacOS не підкоряється вам (* згаданий вище), можливо, вам доведеться знайти інший спосіб змінити свій шлях, але це навряд чи буде проблемою, оскільки «Маки просто працюють»;)


1
Ах, товариш, нарешті! Спробував близько 25 різних рішень, перш ніж я знайшов це, дякую
Danny Santos

Добре пояснене рішення. Дякую.
killscreen

23

Я щойно знайшов цю саму проблему. Що я зробив, це видалити rbenv (через homebrew) та перевстановити його. Я також додав

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

у ~ / .bash_profile, коли я перевстановив rbenv. Працює ідеально зараз.


1
Зауважте для інших, хто зіткнувся з тим же питанням, що і я: З деяких причин, який rbenv працював раніше, тому цей рядок ніколи не виконувався. Я виправив це, використовуючи безпосередньо eval "$ (rbenv init -)".
dadoonet

Приємна маленька заява eval для цього випадку використання!
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 Catalina, повинні слідувати інструкції zsh
Абхінай

4

rbenv help shell

"Встановлює специфічну для оболонки версію Ruby, встановивши змінну середовища" RBENV_VERSION "у вашій оболонці. Ця версія переосмислює специфічні для локаліпплікації версії і глобальну версію. 'буде використовувати вашу систему за замовчуванням Ruby. Запустіть rbenv версії' для списку доступних версій Ruby. "

Якщо rbenv встановлено правильно, відповідатиме ruby ​​-v

rbenv shell 1.9.3-p125


'rbenv shell xyz' - це те, що працювало для мене. Описаний у відповіді вищого рангу вище "rbenv local xyz" не працював на OS X.
Jeremy Rea

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)

Після цього не виникає проблем при установці, комутації, використанні рубінових версій за допомогою 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, на який посилається ОП. Насправді, якщо ви встановите 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

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

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

Це вже зроблено з установкою домашнього мовлення. Є один важливий крок, який необхідно зробити в домашній мові, як і в установці Linux. Ви повинні додати rbenv прокладки до вашого шляху. Для цього, коли ваша оболонка запускається, ви повинні оцінити наступну команду (яка, в свою чергу, додасть rbenv shims до початку вашого $ PATH):

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

Тепер, коли ви запустите echo $PATH, ви побачите, що rbenv прошиває:

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

Тепер перевірте свою версію ruby, і вона відобразить встановлений rubin rbenv:

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.