rbenv nie zmienia wersji ruby

268

Zainstalowałem Rbenv zgodnie ze wskazówkami github. Używam OSX, ale wypróbowałem to na maszynie Wirtualnej Ubuntu 12.04 i uzyskałem te same wyniki. Oto, co otrzymuję w moim terminalu, gdy próbuję zmienić wersje 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

Czy ktoś ma jakieś pomysły, dlaczego rbenv nie zmienia wersji ruby ​​tak, jak jej się wydaje? Ponadto w katalogu lokalnym nie ma pliku .rbenv, który powodowałby domyślną wersję Ruby do 1.8.7

rbenv local
rbenv: no local version configured for this directory
ajorgensen
źródło
Czy zdecydowanie umieściłeś init w bashrc poprawnie? Jak wygląda Twoja ŚCIEŻKA $?
d11wtq
Żadne z tych poleceń nie zmienia wersji Ruby, której używa rbenv, ale wygląda na to, że nie używa domyślnego Ruby.
Andrew Marshall,
@ d11wtq było poprawne. najwyraźniej nie było poprawnie w moim ~ / .bash_profile.
ajorgensen

Odpowiedzi:

518

Sprawdź, czy ŚCIEŻKA zawiera $ HOME / .rbenv / shims i $ HOME / .rbenv / bin

$ env | grep PATH

Sprawdź także, czy masz w swoim ~ / .bash_profile, jeśli używasz bash lub ~ / .zshenv, jeśli używasz zsh

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

UWAGA: Upewnij się, że jest to ostatnie ustawienie w twoim ~ / .bash_profile. Wystąpił problem polegający na tym, że zainstalowałem program, który zaktualizował mój profil .bash i zresetował PATH.

Na koniec upewnij się, że w $HOMEfolderze nie ma .ruby-versionpliku, który mógł zostać utworzony przypadkowo, jeśli miałbyś to zrobić $ rbenv local <ruby-version>w swoim $HOMEfolderze. Wykonanie $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / wersja file, and the existence of a.ruby-wersja file in the$ HOME folder would override the version set by$ HOME / .rbenv / wersja`.

Z dokumentów:

Wybieranie wersji Ruby Podczas wykonywania podkładki, rbenv określa, której wersji Ruby użyć, czytając ją z następujących źródeł, w następującej kolejności:

Zmienna środowiskowa RBENV_VERSION, jeśli jest określona. Możesz użyć polecenia powłoki rbenv, aby ustawić tę zmienną środowiskową w bieżącej sesji powłoki.

Pierwszy plik w wersji .ruby znaleziony przez przeszukanie katalogu wykonywanego skryptu i każdego z jego katalogów nadrzędnych, aż do osiągnięcia katalogu głównego systemu plików.

Pierwszy plik w wersji .ruby został znaleziony przez przeszukanie bieżącego katalogu roboczego i każdego z jego katalogów nadrzędnych aż do osiągnięcia katalogu głównego systemu plików. Możesz zmodyfikować plik .ruby-version w bieżącym katalogu roboczym za pomocą lokalnego polecenia rbenv.

Globalny plik ~ / .rbenv / version. Możesz zmodyfikować ten plik za pomocą globalnej komendy rbenv. Jeśli plik wersji globalnej nie jest obecny, rbenv zakłada, że ​​chcesz użyć Ruby „systemowego” - tzn. Niezależnie od wersji, która byłaby uruchomiona, gdyby rbenv nie znajdował się na twojej ścieżce.

defvol
źródło
34
W OSX nie zapomnij wylogować się z sesji OSX, a następnie zalogować się ponownie, aby zmiany wprowadzone w profilu bash zaczęły obowiązywać.
Jeremy Ricketts
15
Albo zrób exec $SHELL -l(niższe L)
pduersteler
3
Gdzie muszę dodać „$ HOME / .rbenv / shims” i „$ HOME / .rbenv / bin”?
Benedikt,
3
Zrobiłem tak: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fidziała całkiem dobrze :) Sprawdź także, czy inicjacja PATH jest po deklaracji rbenv.
merqlove
1
W moim przypadku muszę dołączyć te dwie linie do .bashrc (Bash w Ubuntu), a następnie mam poprawną wersję ruby. Nie działa, jeśli dodasz go do .bash_profile.
alexhilton
98

Naprawiłem to, dodając następujące informacje do mojego ~ / .bash_profile:

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

To jest udokumentowane na https://github.com/sstephenson/rbenv .

Z tego, co mogę powiedzieć, nie ma katalogu ~ / .rbenv / bin, o którym wspomniano w poście @rodowi.

mjmdavis
źródło
+1 za link. +1 za odpowiedź, która jest sprzeczna z lepszą odpowiedzią głosowaną. Co nasuwa kolejne pytanie - a jeśli ktoś może się wtrącić - jak może export PATH="$HOME/.rbenv/bin:$PATHdziałać (bo mi się nie udawało)?
Jerome
1
Nie będzie, ~/.rbenv/bin/jeśli instalujesz przez homebrew lub linuxbrew. I nie powinieneś sam ustawiać ścieżki podkładek, podobnie rbenv initjak to (i więcej) dla Ciebie .
Dennis,
To naprawiło mój problem.
Martyn Chamberlin
To powinno być w README
onmyway133
Pracował dla mnie po godzinach próbowania innych rzeczy. Dzięki!
cjs1978,
91

To może być stare pytanie, ale Google zaprowadził mnie tutaj i, dla potomności, pomyślał, że się podzielę.

Mój problem utrzymywał się po wielu powyższych zalecanych rozwiązaniach. Podobnie jak OP, zainstalowałem rbenv, a następnie wersję ruby, ale mój laptop domyślnie był ustawiony na system. To, co przeoczyłem, to to, że kiedy biegłem:

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

IOW, nadal domyślnie działał system. Szybki

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

przełączyłem go na nową wersję.

alphadogg
źródło
7
Tak - zabawne, że przewodniki instalacji rbenv w ogóle nie wspominają o uruchomieniu lokalnego polecenia. Wiele blogów przypomina, że ​​możesz uruchamiać rbenv globalnie, ale nie lokalnie. Świetna odpowiedź.
Steve Midgley,
Taki sam problem. To samo rozwiązanie. (Może trzeba spojrzeć na przesłanie PR, aby poinformować, kiedy globalna wersja Ruby zostanie unieważniona przez ~ / .ruby-wersja ...)
Mark Glossop
Musiałem pozbyć się systemu usuwając z YUM w Centos 7, dopiero potem mogłem zobaczyć poprawną wersję wybraną w rbenv
Joe Walker
Jestem zszokowany, że musiałem tak daleko wykopać odpowiedź, to jest dla mnie poprawne.
Ian Hyzy
Odkryłem, że komenda rbenv version powiedziała, że ​​2.3.1 został ustawiony w .ruby-wersjach przez rvm. Jakiś czas temu przestałem używać rvm i zmieniłem na rbenv. Usunięto wersje .ruby i uruchomiłem ponownie wersje rbenv, a najnowsza została wybrana przez rbenv (upewnij się, że masz instrukcję eval powyżej w .bash_profile!). Teraz wszystko działa jak poprzednio. Dzięki za pomoc w rozwiązaniu tego problemu.
John Wooten,
45

Pierwszym krokiem jest ustalenie, który rubin jest nazywany:
which ruby

Twój system mówi:
/usr/bin/ruby

To NIE jest podkładka używana przez rbenv, która (na MacOS) powinna wyglądać następująco:
/Users/<username>/.rbenv/shims/ruby

Podkładka jest w rzeczywistości skryptem, który działa jak przekierowanie do ustawionej wersji ruby.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Zalecam, aby w przypadku problemów związanych z rozwiązywaniem problemów rozłączyć wersję „lokalną” specyficzną dla projektu i wersję „powłoki” specyficzną dla powłoki i po prostu przetestować przy użyciu ustawienia wersji „globalnej” określonej w zwykłym pliku tekstowym w ~ / .rbenv / verion, który w twoim przypadku będzie to po prostu numer wersji „1.9.3”. Możesz zrobić „ls -laG” w katalogu głównym folderu projektu (nie w folderze domowym), aby upewnić się, że nie ma już pliku „.ruby-version”.

Możesz użyć „wersji rbenv”, aby określić, która wersja rbenv jest ustawiona (oraz lokalizację i nazwę pliku, który ją ustawia).

rbenv versions

BRAK Z LICZBY: dopóki ścieżka nie zostanie poprawnie ustawiona.

Użyj tego, aby upewnić się, że * MacOS będzie cię przestrzegać:
eval "$(rbenv init -)"

Śledzony przez:
which ruby

Aby upewnić się, że wygląda następująco: /Users//.rbenv/shims/ruby

Następnie dodaj linię do swojego profilu, aby działał za każdym razem, gdy otwierasz nowe okno terminala:
~/.bash_profile eval "$(rbenv init -)"

Istnieją inne sposoby modyfikowania ścieżki, możesz zastąpić dowolną z nich zamiast uruchamiać init rbenv.

UWAGA: zainstaluj ponownie Railsy za pomocą:
gem install rails

Jeśli próbujesz uruchomić Ruby on Rails, najpierw musisz to wszystko uruchomić, a następnie ponownie zainstalować klejnot Rails. Poprzednia instalacja Railsów użyje zakodowanej ścieżki do niewłaściwego rubinu, a kilka innych rzeczy znajdzie się w niewłaściwym miejscu, więc po prostu zainstaluj klejnot ponownie.

PS Jeśli Twój MacOS nie będzie cię słuchać (* wspomniano powyżej), być może będziesz musiał znaleźć inny sposób na modyfikację ścieżki, ale nie jest to problem, ponieważ „Mac tylko działa”;)

Sky Notify
źródło
1
Ach, w końcu! Wypróbowałem około 25 różnych rozwiązań, zanim znalazłem to, dziękuję
Danny Santos
Dobrze wyjaśnione rozwiązanie. Dziękuję Ci.
killscreen
23

Właśnie znalazłem ten sam problem. To, co zrobiłem, to odinstalowanie rbenv (przez homebrew) i ponowna instalacja. Dodałem również

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

do ~ / .bash_profile po ponownej instalacji rbenv. Działa idealnie teraz.

Neal
źródło
1
Uwaga dla innych, którzy podeszli do tego samego problemu co ja: Z pewnych powodów, który rbenv działał wcześniej, więc ta linia nigdy nie została wykonana. Naprawiłem to używając bezpośrednio eval „$ (rbenv init -)”.
dadoonet
Ładne, małe stwierdzenie dotyczące tego przypadku użycia!
killscreen
18

W moim przypadku zmiana ~/.zshenvnie działała. Musiałem wprowadzić zmiany w środku ~/.zshrc.

Właśnie dodałem:

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

na górze ~/.zshrczrestartował powłokę i wylogował się.

Sprawdź, czy zadziałało:

  ~ 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
źródło
To doskonale działa. Dodałem to do .bash_profile not / zshenv.
Kang Byul
8

Uruchom to polecenie

Dodaj rbenv do bash, aby ładował się za każdym razem, gdy otwierasz terminal

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

rozwiąże to twój problem Odnośnik

Singhak
źródło
1
Spędziłem godziny, aby to naprawić. Wreszcie twoje rozwiązanie pomogło. Dzięki!!
User7354632781
5

Jeśli używasz bash , przejdź do

~/.bash_profile

i dodaj następujący wiersz (jeśli jeszcze go nie ma)

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

Jeśli używasz Zsh, przejdź do

~/.zshrc

i dodaj ten sam wiersz kodu na końcu pliku .zshrc.

Następnie po prostu uruchom ponownie terminal i powinno już być dobrze.

drjorgepolanco
źródło
Ludzie na Mac os Catalina powinni postępować zgodnie z instrukcją zsh
Abhinay,
4

rbenv help shell

„Ustawia wersję Ruby specyficzną dla powłoki, ustawiając w powłoce zmienną środowiskową„ RBENV_VERSION ”. Ta wersja zastępuje wersje specyficzne dla aplikacji lokalnej i wersja globalna. Powinien być ciągiem pasującym do wersji Ruby znanej rbenv. Ciąg znaków wersji specjalnej „użyje domyślnego systemu Ruby. Uruchom wersje rbenv”, aby wyświetlić listę dostępnych wersji Ruby. ”

Pod warunkiem, że rbenv został poprawnie zainstalowany, ruby ​​-v będzie odpowiadać

rbenv shell 1.9.3-p125

htmldrum
źródło
„rbenv shell xyz” działało dla mnie. „Lokalny xyz rbenv” opisany w wyżej wymienionej odpowiedzi wyżej nie działał w systemie OS X.
Jeremy Rea
4

Jak dla mnie najłatwiejszym sposobem używania rbenvwraz z zshdodawaniem rbenvdo sekcji wtyczek w .zshrcconfig. W moim przypadku wygląda podobnie do:

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

Po tym nie ma problemów z instalacją, przełączaniem, używaniem wersji Ruby przy pomocy rbenv.

Pamiętaj o ponownym uruchomieniu sesji terminala po wprowadzeniu zmian.

Rootical V.
źródło
4

Miałem ten sam problem, ale spowodowany przez 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

W jakiś sposób zainstalowałem też Ruby przez Homebrew, a ścieżka Homebrew wyprzedziła moją ścieżkę rbenv $PATH. Bieganie brew uninstall rubynaprawiło to dla mnie.

djb
źródło
4

biegać:

rbenv init

Po uruchomieniu tego, kiedy ustawiłem moją lokalną wersję rbenv:

rbenv local 2.4.0

wtedy moja ruby -vi moja rbenv localwersja zbiegły się.

Uwaga: możesz także wyjść z katalogu, w którym się znajdujesz, a następnie wrócić do niego, zauważyłem, że było to dla mnie konieczne, aby wszystko działało.

AmitF
źródło
3

Doszedłem do tego samego problemu. Naprawiono to poprzez uruchomienie polecenia „rbenv global” z „sudo”. Myślę, że to był problem z pozwoleniem.

aktualizacja: w końcu znalazłem rozwiązanie. Na moim Macu była jedna taka sama „wersja” pliku, która znajduje się w „/usr/local/Cellar/rbenv/0.3.0/”. Myślę, że od czasu do czasu został stworzony przez pomyłkę. powinieneś to usunąć.

Vincent
źródło
3

Kiedy miałem te objawy, okazało się, że problem polegał na tym, że instalacja nie powiodła się w połowie dla nowej wersji Ruby, na którą próbowałem się przełączyć, bez mojej uwagi. Poprawka polegała na usunięciu i ponownej instalacji.

(Oznaczało to, że chociaż Ruby 1.9.3 pojawił się na liście dostępnych wersji rbenv, nie miał pliku wykonywalnego na ścieżce, na której rbenv tak zakładał. Ponieważ rbenv próbuje zmienić twoją wersję ruby ​​tylko przygotowując lokalizację do twoja ścieżka, jeśli nic nie jest w miejscu, które poprzedza, Twój system operacyjny z przyjemnością przeszuka twoją domyślną ścieżkę i znajdzie twoją wersję systemu, w moim przypadku jak w pytaniu 1.8.7.)

David
źródło
3

dla użytkownika skorupy ryb

set --universal fish_user_paths $fish_user_paths ~/.rbenv/shims/
Basil Mariano
źródło
2

Zdarzyło mi się to zaraz po ponownej instalacji rbenv. Najwyraźniej miałem .ruby-versionplik w moim katalogu domowym, określający wersję, która już nie istniała. Po usunięciu pliku wszystko działało.

John K. Chow
źródło
2

Upewnij się, że ostatni wiersz .bash_profileto:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
elimcjah
źródło
1

Zaakceptowana odpowiedź sugeruje dodanie następujących elementów:

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

To nie będzie działać na Mac OSX, do którego odwołuje się OP. W rzeczywistości, jeśli zainstalujesz rbenv przez brew install rbenv, który jest tak naprawdę jedyną metodą instalacji w Mac OSX, ponieważ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashnie powiedzie się w OSX, to plik wykonywalny rbenv zostanie zainstalowany w:

$ which rbenv
/usr/local/bin/rbenv

Jednak nawet w OSX root rbenv pozostanie w katalogu $ HOME:

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

Co to znaczy? Oznacza to, że kiedy zainstalujesz rubiny, zostaną one zainstalowane w podanym katalogu domowym pod .rbenv:

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

Teraz instalacja parzenia wykonała pracę, którą musiałbyś wykonać ręcznie w Linuksie. Na przykład w Linuksie musiałbyś ręcznie zainstalować Ruby-build jako wtyczkę:

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

Dokonano tego już przy instalacji Homebrew. Jest jeden ważny krok, który należy zrobić w instalacji homebrew, podobnie jak w instalacji Linux. Musisz dodać podkładki rbenv do swojej ścieżki. Aby to zrobić, kiedy uruchomi się twoja powłoka, musisz ocenić następujące polecenie (które z kolei doda podkładki rbenv na początku twojej $ PATH):

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

Teraz, gdy biegniesz echo $PATH, zobaczysz podkładki rbenv:

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

Teraz sprawdź swoją wersję ruby, a będzie ona odzwierciedlała zainstalowany rubin rbenv:

ruby -v
ruby 2.6.0p0 
Donato
źródło
0

O dziwo, wersja rbenv nie ustawiła pliku .rbenv Sprawdź za pomocą: ls -ltra -> aby zobaczyć, czy napisano rbenv

poseid
źródło
0

Możesz spróbować użyć chruby ? chruby nie opiera się na podkładek, zamiast tego tylko modyfikuje PATH, GEM_HOME, GEM_PATH.

postmodernistyczny
źródło
-1

Zapomniałem usunąć rvm przed instalacją rbenv. Usunąłem rvm i ponownie zainstalowałem rbenv, ale system nadal nie używał wersji Ruby oznaczonej przez rbenv jako globalna. Próbowałem zamknąć Terminal, ale zadziałało to dopiero po ponownym uruchomieniu całej maszyny.

ajain
źródło