rbenv tidak mengubah versi ruby

269

Saya menginstal rbenv sesuai dengan petunjuk github. Saya menjalankan OSX tapi saya sudah mencoba ini pada Ubuntu 12,04 VM dan mendapat hasil yang sama. Berikut ini adalah apa yang saya dapatkan di terminal saya ketika saya mencoba mengubah versi 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

Adakah yang tahu mengapa rbenv tidak mengganti versi ruby ​​seperti yang dianggapnya? Juga tidak ada file .rbenv di direktori lokal yang akan menyebabkan versi ruby ​​default ke 1.8.7

rbenv local
rbenv: no local version configured for this directory
ajorgensen
sumber
Sudahkah Anda menempatkan init di bashrc dengan benar? Seperti apa bentuk $ PATH Anda?
d11wtq
Tidak satu pun dari perintah itu yang mengubah versi Ruby yang digunakan rbenv, tetapi tampaknya itu tidak menggunakan Ruby default Anda.
Andrew Marshall
@ d11wtq benar. itu tidak di ~ / .bash_profile saya dengan benar rupanya.
ajorgensen

Jawaban:

519

Periksa apakah PATH berisi $ HOME / .rbenv / shims dan $ HOME / .rbenv / bin

$ env | grep PATH

Juga periksa apakah Anda memiliki yang berikut di ~ / .bash_profile Anda jika menggunakan bash atau ~ / .zshenv jika menggunakan zsh

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

CATATAN: Pastikan ini adalah pengaturan terakhir di ~ / .bash_profile Anda. Saya mengalami masalah di mana saya menginstal program yang memperbarui .bash_profile dan mengatur ulang PATH.

Terakhir, pastikan $HOMEfolder Anda tidak memiliki .ruby-versionfile yang mungkin Anda buat secara tidak sengaja jika dilakukan $ rbenv local <ruby-version>di $HOMEfolder Anda . Melakukan $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / versi file, and the existence of a.ruby-versi file in the$ HOME folder would override the version set by$ HOME / .rbenv / version`.

Dari dokumen:

Memilih Versi Ruby Ketika Anda menjalankan shim, rbenv menentukan versi Ruby mana yang akan digunakan dengan membacanya dari sumber-sumber berikut, dalam urutan ini:

Variabel lingkungan RBENV_VERSION, jika ditentukan. Anda dapat menggunakan perintah shell rbenv untuk mengatur variabel lingkungan ini di sesi shell Anda saat ini.

File .ruby-versi pertama ditemukan dengan mencari direktori skrip yang Anda jalankan dan masing-masing direktori induknya hingga mencapai akar sistem file Anda.

File .ruby-versi pertama ditemukan dengan mencari direktori kerja saat ini dan masing-masing direktori induknya hingga mencapai akar sistem file Anda. Anda dapat memodifikasi file .ruby-versi di direktori kerja saat ini dengan perintah rbenv lokal.

File global ~ / .rbenv / versi. Anda dapat memodifikasi file ini menggunakan perintah global rbenv. Jika file versi global tidak ada, rbenv mengasumsikan Anda ingin menggunakan Ruby "sistem" —yaitu versi apa pun yang akan dijalankan jika rbenv tidak ada di jalur Anda.

defvol
sumber
34
Di OSX, jangan lupa untuk keluar dari sesi OSX Anda dan kemudian masuk kembali agar perubahan pada profil bash Anda berlaku.
Jeremy Ricketts
15
Atau do exec $SHELL -l(lower L)
pduersteler
3
Di mana saya harus menambahkan "$ HOME / .rbenv / shims" dan "$ HOME / .rbenv / bin"?
Benedikt
3
Saya membuat seperti ini: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiBekerja cukup bagus :) Juga memeriksa PATH init setelah deklarasi rbenv.
merqlove
1
Untuk kasus saya, saya perlu menambahkan dua baris ini ke .bashrc (Bash di Ubuntu) dan kemudian saya mendapatkan versi ruby ​​yang benar. Ini tidak berfungsi jika menambahkannya ke .bash_profile.
alexhilton
98

Saya memperbaikinya dengan menambahkan berikut ini ke ~ / .bash_profile saya:

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

Inilah yang didokumentasikan di https://github.com/sstephenson/rbenv .

Dari apa yang saya tahu tidak ada direktori ~ / .rbenv / bin, yang disebutkan dalam pos oleh @rodowi.

mjmdavis
sumber
+1 untuk tautan. +1 untuk jawaban yang bertentangan dengan jawaban yang lebih baik. Yang menimbulkan pertanyaan lebih lanjut - dan jika ada yang bisa berpadu - bagaimana bisa export PATH="$HOME/.rbenv/bin:$PATHbekerja (seperti yang gagal bagi saya)?
Jerome
1
Tidak akan ada ~/.rbenv/bin/jika Anda menginstal melalui homebrew atau linuxbrew. Dan Anda tidak harus mengatur sendiri shims path, seperti rbenv inithalnya ini (dan banyak lagi) untuk Anda .
Dennis
Ini memperbaiki masalah saya.
Martyn Chamberlin
Ini harus dalam README
onmyway133
Bekerja untuk saya setelah berjam-jam mencoba hal-hal lain. Terima kasih!
cjs1978
91

Ini mungkin pertanyaan lama, tetapi Google membawa saya ke sini dan, demi anak cucu, saya pikir saya akan berbagi.

Masalah saya tetap ada setelah banyak solusi yang direkomendasikan di atas. Seperti OP, saya menginstal rbenv dan kemudian versi ruby, tetapi laptop saya default ke sistem. Apa yang saya abaikan adalah ketika saya berlari:

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

TKI, itu masih default ke sistem. Cepat

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

beralih ke versi baru.

alphadogg
sumber
7
Ya - lucu bagaimana rbenv menginstal panduan tidak menyebutkan menjalankan perintah lokal sama sekali. Banyak blog yang mengingatkan Anda untuk menjalankan rbenv global tetapi tidak lokal. Jawaban yang bagus
Steve Midgley
Permasalahan yang sama. Solusi yang sama. (Mungkin harus melihat mengajukan PR untuk memberi saran ketika versi global Ruby ditolak oleh versi ~ / .ruby ...)
Mark Glossop
Saya harus menyingkirkan sistem dengan menghapus dengan YUM di Centos 7, hanya setelah itu saya bisa melihat versi yang benar dipilih di rbenv
Joe Walker
Saya terkejut saya harus menggali sejauh ini untuk mendapat jawaban, ini yang benar untuk saya.
Ian Hyzy
Saya menemukan bahwa perintah versi rbenv mengatakan bahwa 2.3.1 diatur dalam .ruby-versi oleh rvm mungkin. Saya telah berhenti menggunakan rvm beberapa waktu lalu dan berubah menjadi rbenv. Dihapus .ruby-versi dan menjalankan versi rbenv lagi dan itu telah dipilih oleh rbenv terbaru (pastikan Anda memiliki pernyataan eval di atas di .bash_profile!). Sekarang, semua berfungsi seperti sebelumnya. Terima kasih telah membantu saya menyelesaikan masalah ini.
John Wooten
45

Langkah pertama adalah mencari tahu ruby ​​mana yang dipanggil:
which ruby

Sistem Anda mengatakan:
/usr/bin/ruby

Ini BUKAN shim yang digunakan oleh rbenv, yang (pada MacOS) akan terlihat seperti:
/Users/<username>/.rbenv/shims/ruby

Shim sebenarnya adalah skrip yang bertindak seperti pengalihan ke versi ruby ​​yang Anda atur.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Saya merekomendasikan bahwa untuk pemecahan masalah Anda membatalkan versi "lokal" spesifik proyek, dan versi "shell" khusus shell dan hanya menguji menggunakan pengaturan versi "global" yang ditentukan dalam file teks biasa di ~ / .rbenv / verion yang hanya akan menjadi nomor versi "1.9.3" dalam kasus Anda. Anda dapat melakukan "ls -laG" di root folder proyek Anda (bukan folder home) untuk memastikan tidak ada lagi file ".ruby-version" di sana.

Anda dapat menggunakan "versi rbenv" untuk mengidentifikasi versi rbenv mana yang diatur untuk digunakan (dan lokasi serta nama file yang mengaturnya).

rbenv versions

TIDAK ADA MASALAH YANG: sampai Anda mengatur jalur dengan benar.

Gunakan ini untuk memastikan * MacOS Anda akan mematuhi Anda:
eval "$(rbenv init -)"

Diikuti oleh:
which ruby

Untuk memastikannya terlihat seperti: / Pengguna //.rbenv/shims/ruby

Kemudian tambahkan baris ke profil Anda sehingga berjalan setiap kali Anda membuka jendela terminal baru:
~/.bash_profile eval "$(rbenv init -)"

Ada cara lain untuk memodifikasi path, jangan ragu untuk mengganti salah satunya, daripada menjalankan rbenv init.

CATATAN: pasang kembali Rails dengan:
gem install rails

Jika Anda mencoba menjalankan Ruby on Rails, maka Anda harus menjalankan semua ini terlebih dahulu, lalu pasang gem rails lagi. Pemasangan Rails sebelumnya akan menggunakan jalur kode keras ke ruby ​​yang salah dan beberapa hal lain akan berada di tempat yang salah, jadi pasang saja permata itu lagi.

NB. Jika MacOS Anda tidak mematuhi Anda (* disebutkan di atas) maka Anda mungkin harus menemukan cara lain untuk memodifikasi jalur Anda, tetapi itu tidak akan menjadi masalah karena "Mac hanya berfungsi";)

Beritahu Sky
sumber
1
Ah sobat, akhirnya! Sudah mencoba sekitar 25 solusi berbeda sebelum saya menemukan yang ini, terima kasih
Danny Santos
Solusi yang dijelaskan dengan baik. Terima kasih.
killscreen
23

Saya baru saja menemukan masalah yang sama. Apa yang saya lakukan adalah menghapus rbenv (via homebrew) dan menginstalnya kembali. Saya juga menambahkan

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

ke ~ / .bash_profile ketika saya menginstal ulang rbenv. Bekerja dengan baik sekarang.

Neal
sumber
1
Catatan untuk orang lain yang datang ke masalah yang sama dengan saya: Untuk beberapa alasan, rbenv mana yang bekerja sebelumnya sehingga baris ini tidak pernah dieksekusi. Saya memperbaikinya menggunakan eval langsung "$ (rbenv init -)".
Dadoonet
Pernyataan eval kecil yang bagus untuk kasus penggunaan ini!
killscreen
18

Dalam kasus saya mengubah ~/.zshenvtidak berhasil. Saya harus membuat perubahan di dalam ~/.zshrc.

Saya baru saja menambahkan:

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

di bagian atas ~/.zshrc, restart shell dan keluar.

Periksa apakah berhasil:

  ~ 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
sumber
Ini bekerja dengan sempurna. Saya menambahkannya ke .bash_profile bukan / zshenv.
Kang Byul
8

Jalankan perintah ini

Tambahkan rbenv ke bash sehingga memuat setiap kali Anda membuka terminal

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

ini akan menyelesaikan Referensi masalah Anda

Singhak
sumber
1
Saya menghabiskan waktu berjam-jam untuk memperbaikinya. Akhirnya solusi Anda membantu. Terima kasih!!
Pengguna7354632781
5

Jika Anda menggunakan bash , buka

~/.bash_profile

dan tambahkan baris berikut (jika belum ada di sana)

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

Jika Anda menggunakan Zsh, buka

~/.zshrc

dan tambahkan baris kode yang sama, di akhir file .zshrc.

Maka cukup restart terminal Anda dan itu akan baik-baik saja sekarang.

drjorgepolanco
sumber
Orang-orang di Mac os Catalina, harus mengikuti instruksi zsh
Abhinay
4

rbenv help shell

"Mengatur versi Ruby khusus shell dengan mengatur variabel lingkungan 'RBENV_VERSION' di shell Anda. Versi ini mengesampingkan versi khusus aplikasi lokal dan versi global. Harus berupa string yang cocok dengan versi Ruby yang dikenal oleh rbenv. Sistem string versi khusus ' 'akan menggunakan sistem default Anda Ruby. Jalankan versi rbenv' untuk daftar versi Ruby yang tersedia. "

Asalkan rbenv diinstal dengan benar, ruby ​​-v akan sesuai dengan

rbenv shell 1.9.3-p125

htmldrum
sumber
'rbenv shell xyz' adalah yang bekerja untuk saya. 'Rbenv local xyz' yang dijelaskan dalam jawaban berperingkat lebih tinggi di atas tidak berfungsi pada OS X.
Jeremy Rea
4

Bagi saya cara termudah untuk digunakan rbenv bersama dengan zshmenambah rbenvke bagian plugin di .zshrcconfig. Dalam kasus saya, tampilannya mirip dengan:

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

Setelah itu tidak ada masalah saat menginstal, beralih, menggunakan versi ruby ​​dengan bantuan rbenv.

Pikiran untuk memulai kembali sesi terminal Anda setelah membuat perubahan.

Akar V.
sumber
4

Saya memiliki masalah yang sama, tetapi disebabkan oleh 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

Entah bagaimana saya telah menginstal Ruby melalui Homebrew juga, dan jalur Homebrew berada di depan jalur rbenv di saya $PATH. Menjalankan brew uninstall rubymemperbaikinya untukku.

djb
sumber
4

Lari:

rbenv init

Setelah saya menjalankannya, ketika saya mengatur versi rbenv lokal saya:

rbenv local 2.4.0

kemudian versi ruby -vsaya dan saya rbenv localbertepatan.

Catatan: Anda mungkin juga ingin keluar dari direktori tempat Anda berada dan kemudian kembali ke dalamnya, saya telah memperhatikan bahwa itu perlu bagi saya untuk menyelesaikan pekerjaan.

AmitF
sumber
3

Saya datang ke masalah yang sama. Memperbaiki ini dengan menjalankan perintah "rbenv global" dengan "sudo". Saya pikir itu adalah masalah izin.

pembaruan: Saya akhirnya menemukan solusinya. Ada satu file "versi" yang sama pada mac saya, yang berada di bawah "/usr/local/Cellar/rbenv/0.3.0/". Saya pikir itu diciptakan oleh kesalahan sesekali. Anda harus menghapusnya.

Vincent
sumber
3

Ketika saya memiliki gejala-gejala ini, masalahnya ternyata instalasi gagal setengah jalan untuk versi Ruby baru yang saya coba untuk beralih, tanpa saya sadari. Cara mengatasinya adalah menghapus & menginstalnya kembali.

(Ini berarti bahwa meskipun ruby ​​1.9.3 muncul di daftar rbenv versi yang tersedia, ruby ​​tidak dapat dieksekusi di jalan yang diasumsikan oleh rbenv. Karena rbenv mencoba mengubah versi ruby ​​Anda hanya dengan menambahkan lokasi ke jalur Anda, jika tidak ada yang benar-benar ada di lokasi yang diawali, OS Anda akan dengan senang hati melanjutkan pencarian jalur default Anda dan menemukan versi sistem Anda, dalam kasus saya seperti pertanyaan 1.8.7.)

David
sumber
3

untuk pengguna kerang ikan

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

Ini terjadi pada saya tepat setelah saya menginstal ulang rbenv. Rupanya saya punya .ruby-versionfile di direktori home saya, menentukan versi yang tidak ada lagi. Setelah saya menghapus file, semuanya berfungsi.

John K. Chow
sumber
2

Pastikan baris terakhir Anda .bash_profileadalah:

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

Jawaban yang diterima menyarankan untuk menambahkan yang berikut:

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

Ini tidak akan berfungsi pada Mac OSX, yang menjadi referensi OP. Bahkan, jika Anda menginstal rbenv via brew install rbenv, yang merupakan satu-satunya metode instalasi di Mac OSX, karena curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashFAIL akan ada di OSX, maka executable rbenv akan diinstal di:

$ which rbenv
/usr/local/bin/rbenv

Namun, bahkan di OSX, root rbenv akan tetap berada di direktori $ HOME:

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

Apa artinya ini? Itu berarti ketika Anda menginstal rubi, mereka akan menginstal di direktori home yang diberikan di bawah .rbenv:

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

Sekarang instalasi brew melakukan beberapa pekerjaan yang harus Anda lakukan secara manual di Linux. Misalnya, di Linux, Anda harus menginstal ruby-build secara manual sebagai plugin:

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

Ini sudah dilakukan dengan instalasi homebrew. Ada satu langkah penting yang harus dilakukan dalam instalasi homebrew, seperti pada instalasi Linux. Anda harus menambahkan rbenv shims ke jalur Anda. Untuk melakukan itu, ketika shell Anda mulai, Anda harus mengevaluasi perintah berikut (yang pada gilirannya akan menambahkan rbenv shims ke awal $ PATH Anda):

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

Sekarang saat Anda berlari echo $PATH, Anda akan melihat rbenv shims:

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

Sekarang periksa versi ruby ​​Anda dan itu akan mencerminkan rubi rbenv diinstal:

ruby -v
ruby 2.6.0p0 
Donato
sumber
0

Anehnya, versi rbenv tidak mengatur file .rbenv Periksa dengan: ls -ltra -> untuk melihat apakah rbenv ditulis

Poseid
sumber
0

Anda bisa mencoba menggunakan chruby ? chruby tidak bergantung pada shims, bukan hanya memodifikasi PATH, GEM_HOME, GEM_PATH.

postmodern
sumber
-1

Saya lupa menghapus rvm sebelum menginstal rbenv. Saya menghapus rvm dan menginstal ulang rbenv, tetapi sistem masih tidak menggunakan versi Ruby yang ditetapkan sebagai global oleh rbenv. Saya mencoba mematikan Terminal, tetapi hanya berhasil setelah saya me-restart seluruh mesin.

ajain
sumber