rbenv không thay đổi phiên bản ruby


269

Tôi đã cài đặt rbenv theo hướng dẫn của github. Tôi đang chạy OSX nhưng tôi đã thử điều này trên máy ảo Ubuntu 12.04 và nhận được kết quả tương tự. Sau đây là những gì tôi nhận được trong thiết bị đầu cuối của mình khi tôi cố gắng thay đổi phiên bản 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

Bất cứ ai cũng có ý tưởng về lý do tại sao rbenv không chuyển đổi phiên bản ruby ​​như nó nghĩ? Ngoài ra, không có tệp .rbenv trong thư mục cục bộ sẽ khiến phiên bản ruby ​​được mặc định là 1.8.7

rbenv local
rbenv: no local version configured for this directory

Bạn đã chắc chắn đặt init trong bashrc của mình một cách chính xác chưa? $ PATH của bạn trông như thế nào?
d11wtq

Không có lệnh nào thay đổi phiên bản Ruby mà rbenv đang sử dụng, nhưng có vẻ như nó không sử dụng Ruby mặc định của bạn.
Andrew Marshall

@ d11wtq đã đúng. rõ ràng nó không có trong ~ / .bash_profile.
ajorgensen

Câu trả lời:


519

Kiểm tra xem PATH có chứa $ HOME / .rbenv / miếng chêm và $ HOME / .rbenv / bin

$ env | grep PATH

Đồng thời kiểm tra xem bạn có những điều sau trong ~ / .bash_profile nếu sử dụng bash hoặc ~ / .zshenv nếu sử dụng zsh

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

LƯU Ý: Đảm bảo rằng đó là cài đặt cuối cùng trong ~ / .bash_profile của bạn. Tôi gặp phải một vấn đề trong đó tôi đã cài đặt một chương trình cập nhật .bash_profile của mình và đặt lại PATH.

Cuối cùng, hãy đảm bảo $HOMEthư mục của bạn không có .ruby-versiontệp mà bạn có thể đã tạo một cách tình cờ nếu bạn đã thực hiện $ rbenv local <ruby-version>trong $HOMEthư mục của mình . Làm $ rbenv global <ruby-version>' modifies the$ HOME / .rbenv / phiên bản file, and the existence of a.ruby-phiên bản file in the$ HOME folder would override the version set by$ HOME / .rbenv / phiên bản`.

Từ các tài liệu:

Chọn phiên bản Ruby Khi bạn thực hiện shim, rbenv xác định phiên bản Ruby nào sẽ sử dụng bằng cách đọc nó từ các nguồn sau, theo thứ tự sau:

Biến môi trường RBENV_VERSION, nếu được chỉ định. Bạn có thể sử dụng lệnh shell rbenv để đặt biến môi trường này trong phiên shell hiện tại của bạn.

Tệp phiên bản .ruby đầu tiên được tìm thấy bằng cách tìm kiếm thư mục của tập lệnh bạn đang thực thi và từng thư mục mẹ của nó cho đến khi đến thư mục gốc của hệ thống tệp của bạn.

Tệp phiên bản .ruby đầu tiên được tìm thấy bằng cách tìm kiếm thư mục làm việc hiện tại và từng thư mục mẹ của nó cho đến khi đến thư mục gốc của hệ thống tệp của bạn. Bạn có thể sửa đổi tệp .ruby phiên bản trong thư mục làm việc hiện tại bằng lệnh rbenv local.

Tệp toàn cầu ~ / .rbenv / phiên bản. Bạn có thể sửa đổi tệp này bằng lệnh rbenv toàn cầu. Nếu không có tệp phiên bản toàn cầu, rbenv giả định rằng bạn muốn sử dụng "hệ thống" Ruby, tức là bất kỳ phiên bản nào sẽ được chạy nếu rbenv không có trong đường dẫn của bạn.


34
Trên OSX, đừng quên đăng xuất khỏi phiên OSX của bạn và sau đó đăng nhập lại để thay đổi hồ sơ bash của bạn có hiệu lực.
Jeremy Ricketts

15
Hoặc làm exec $SHELL -l(thấp hơn L)
pduersteler

3
Tôi phải thêm "$ HOME / .rbenv / shims" và "$ HOME / .rbenv / bin" ở đâu?
Benedikt

3
Tôi đã làm như thế này: export RBENV_ROOT="$HOME/.rbenv" if which rbenv > /dev/null; then eval "$(rbenv init -)"; fiHoạt động khá tốt :) Ngoài ra, hãy kiểm tra PATH init sau khi khai báo rbenv.
merqlove

1
Đối với trường hợp của tôi, tôi cần nối hai dòng này vào .bashrc (Bash trong Ubuntu) và sau đó tôi có phiên bản ruby ​​chính xác. Nó không hoạt động nếu nối nó vào .bash_profile.
alexhilton

98

Tôi đã sửa lỗi này bằng cách thêm đoạn sau vào ~ / .bash_profile:

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

Đây là những gì được ghi lại tại https://github.com/sstephenson/rbenv .

Từ những gì tôi có thể nói không có thư mục ~ / .rbenv / bin, được đề cập trong bài đăng của @rodowi.


+1 cho liên kết. +1 cho câu trả lời không mâu thuẫn với câu trả lời được bình chọn tốt hơn. Điều này đặt ra một câu hỏi tiếp theo - và nếu bất cứ ai có thể kêu vang - làm thế nào có thể export PATH="$HOME/.rbenv/bin:$PATHlàm việc (như nó đã thất bại đối với tôi)?
Jerome

1
Sẽ không có ~/.rbenv/bin/nếu bạn cài đặt qua homebrew hoặc linuxbrew. Và bạn không nên tự thiết lập đường dẫn shims, cũng như rbenv initđiều này (và hơn thế nữa) cho bạn .
Dennis

Điều này đã khắc phục vấn đề của tôi.
Martyn Chamberlin

Điều này sẽ có trong README
onmyway133

Làm việc cho tôi sau nhiều giờ thử những thứ khác. Cảm ơn!
cjs1978

91

Đây có thể là một câu hỏi cũ, nhưng Google đã dẫn tôi đến đây và, vì lợi ích của hậu thế, tôi nghĩ tôi muốn chia sẻ.

Vấn đề của tôi vẫn tồn tại sau nhiều giải pháp được đề xuất ở trên. Giống như OP, tôi đã cài đặt rbenv và sau đó là phiên bản ruby, nhưng máy tính xách tay của tôi mặc định là hệ thống. Những gì tôi đã bỏ qua là khi tôi chạy:

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

IOW, nó vẫn được mặc định cho hệ thống. Nhanh lên

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

chuyển nó sang phiên bản mới.


7
Có - thật buồn cười khi các hướng dẫn cài đặt rbenv không đề cập đến việc chạy lệnh cục bộ. Rất nhiều blog nhắc nhở bạn chạy rbenv toàn cầu nhưng không phải cục bộ. Câu trả lời chính xác.
Steve Midgley

Vấn đề tương tự. Giải pháp tương tự. (Có thể phải xem xét gửi PR để thông báo khi phiên bản Ruby toàn cầu bị ghi đè bởi phiên bản ~ / .ruby ...)
Mark Glossop

Tôi đã phải loại bỏ hệ thống bằng cách xóa bằng YUM trong Centos 7, chỉ sau đó tôi mới có thể thấy phiên bản chính xác được chọn trong rbenv
Joe Walker

Tôi bị sốc, tôi phải đào sâu câu trả lời này, đây là câu trả lời đúng cho tôi.
Ian Hyzy

Tôi thấy rằng lệnh phiên bản rbenv nói rằng 2.3.1 đã được đặt trong phiên bản .ruby bởi rvm. Tôi đã ngừng sử dụng rvm một lúc trước và đổi thành rbenv. Đã xóa các phiên bản .ruby và chạy lại các phiên bản rbenv và nó đã được rbenv chọn mới nhất (hãy chắc chắn rằng bạn có tuyên bố eval ở trên trong .bash_profile!). Bây giờ, tất cả hoạt động như trước đây. Cảm ơn đã giúp tôi giải quyết điều này.
John Wooten

45

Bước đầu tiên là tìm ra viên ruby ​​nào đang được gọi:
which ruby

Hệ thống của bạn nói:
/usr/bin/ruby

Đây KHÔNG phải là shim được sử dụng bởi rbenv, mà (trên MacOS) sẽ trông giống như:
/Users/<username>/.rbenv/shims/ruby

Shim thực sự là một kịch bản hoạt động như một chuyển hướng đến phiên bản ruby ​​bạn đặt.

rbenv global 1.9.3 rbenv local --unset rbenv shell --unset
Tôi khuyên bạn nên giải quyết vấn đề khi chụp, bạn hãy bỏ đặt phiên bản "cục bộ" cụ thể của dự án và phiên bản "shell" cụ thể của vỏ và chỉ kiểm tra bằng cài đặt phiên bản "toàn cầu" được xác định trong tệp văn bản thuần trong ~ / .rbenv / verion sẽ chỉ là số phiên bản "1.9.3" trong trường hợp của bạn. Bạn có thể thực hiện "ls -laG" trong thư mục gốc của thư mục dự án (không phải thư mục chính) để đảm bảo không còn tệp ".ruby-version" ở đó.

Bạn có thể sử dụng "phiên bản rbenv" để xác định rbenv phiên bản nào sẽ được sử dụng (và vị trí và tên của tệp đang cài đặt đó).

rbenv versions

KHÔNG CÓ VẤN ĐỀ NÀO: cho đến khi bạn đặt đường dẫn chính xác.

Sử dụng điều này để đảm bảo * MacOS của bạn sẽ tuân theo bạn:
eval "$(rbenv init -)"

Theo dõi bởi:
which ruby

Để đảm bảo nó trông giống như: /Users//.rbenv/shims/ruby

Sau đó thêm dòng vào hồ sơ của bạn để nó chạy mỗi khi bạn mở một cửa sổ đầu cuối mới:
~/.bash_profile eval "$(rbenv init -)"

Có nhiều cách khác để sửa đổi đường dẫn, vui lòng thay thế bất kỳ trong số chúng thay vì chạy init rbenv.

LƯU Ý: cài đặt lại Rails với:
gem install rails

Nếu bạn đang cố chạy Ruby on Rails, thì trước tiên bạn cần phải làm việc này, sau đó cài đặt lại gem rails. Một bản cài đặt trước của Rails sẽ sử dụng một đường dẫn được mã hóa cứng đến viên ruby ​​sai và một số thứ khác sẽ ở sai vị trí, vì vậy chỉ cần cài đặt lại đá quý.

PS Nếu MacOS của bạn không tuân theo bạn (* đã đề cập ở trên) thì bạn có thể phải tìm một cách khác để sửa đổi đường dẫn của mình, nhưng đó không phải là vấn đề vì "Mac chỉ hoạt động";)


1
Ah bạn đời, cuối cùng! Đã thử khoảng 25 giải pháp khác nhau trước khi tôi tìm ra giải pháp này, cảm ơn bạn
Danny Santos

Giải thích tốt giải pháp. Cảm ơn bạn.
killscreen

23

Tôi chỉ tìm thấy vấn đề tương tự. Những gì tôi đã làm là gỡ cài đặt rbenv (thông qua homebrew) và cài đặt lại nó. Tôi cũng đã thêm

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

vào ~ / .bash_profile khi tôi cài đặt lại rbenv. Hoạt động hoàn hảo bây giờ.


1
Lưu ý cho những người khác có cùng vấn đề với tôi: Vì một số lý do, rbenv đã hoạt động trước đó nên dòng này không bao giờ được thực thi. Tôi đã sửa nó bằng cách sử dụng trực tiếp "$ (rbenv init -)".
Dadoonet

Tuyên bố eval nhỏ đẹp cho trường hợp sử dụng này!
killscreen

18

Trong trường hợp của tôi thay đổi ~/.zshenvkhông hoạt động. Tôi đã phải thực hiện những thay đổi bên trong ~/.zshrc.

Tôi chỉ thêm:

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

ở đầu ~/.zshrc, khởi động lại vỏ và đăng xuất.

Kiểm tra nếu nó hoạt động:

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

Điều này hoàn hảo hoạt động. Tôi đã thêm nó vào .bash_profile không / zshenv.
Kang Byul

8

Chạy lệnh này

Thêm rbenv vào bash để nó tải mỗi khi bạn mở terminal

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

điều này sẽ giải quyết vấn đề của bạn tham khảo


1
Tôi đã dành hàng giờ để khắc phục điều này. Cuối cùng giải pháp của bạn đã giúp. Cảm ơn!!
Người dùng7354632781

5

Nếu bạn đang sử dụng bash , hãy đến

~/.bash_profile

và thêm dòng sau (nếu nó chưa có)

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

Nếu bạn đang sử dụng Zsh, hãy đến

~/.zshrc

và thêm cùng một dòng mã, ở cuối tệp .zshrc.

Sau đó, chỉ cần khởi động lại thiết bị đầu cuối của bạn và nó sẽ ổn ngay bây giờ.


Mọi người trên Mac os Catalina, nên làm theo hướng dẫn zsh
Abhinay

4

rbenv help shell

"Đặt phiên bản Ruby dành riêng cho hệ vỏ bằng cách đặt biến môi trường 'RBENV_VERSION' trong hệ vỏ của bạn. Phiên bản này ghi đè các phiên bản dành riêng cho ứng dụng cục bộ và phiên bản toàn cầu. Phải là một chuỗi khớp với phiên bản Ruby được biết đến với rbenv. 'sẽ sử dụng hệ thống Ruby mặc định của bạn. Chạy các phiên bản rbenv' cho danh sách các phiên bản Ruby có sẵn. "

Với điều kiện rbenv đã được cài đặt chính xác, ruby ​​-v sẽ tương ứng với

rbenv shell 1.9.3-p125


'rbenv shell xyz' là những gì làm việc cho tôi. 'Rbenv local xyz' được mô tả trong câu trả lời được xếp hạng cao hơn ở trên không hoạt động trên OS X.
Jeremy Rea

4

Đối với tôi cách dễ nhất để sử dụng rbenvcùng với zshviệc thêm rbenvvào phần bổ trợ trong .zshrccấu hình. Trong trường hợp của tôi, nó trông tương tự như:

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

Sau đó, không có vấn đề gì khi cài đặt, chuyển đổi, sử dụng các phiên bản ruby ​​với sự trợ giúp của rbenv .

Tâm trí để khởi động lại phiên cuối của bạn sau khi thay đổi.


4

Tôi đã có cùng một vấn đề, nhưng gây ra bởi 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

Bằng cách nào đó tôi cũng đã cài đặt Ruby thông qua Homebrew và con đường Homebrew đi trước con đường rbenv trong tôi $PATH. Chạy brew uninstall rubycố định nó cho tôi.


4

chạy:

rbenv init

Sau khi tôi chạy nó, khi tôi đặt phiên bản rbenv cục bộ của mình:

rbenv local 2.4.0

sau đó tôi ruby -vvà tôirbenv local phiên bản trùng khớp.

Lưu ý: Bạn cũng có thể muốn thoát khỏi thư mục bạn đang truy cập và sau đó quay lại thư mục đó, tôi nhận thấy rằng điều đó là cần thiết đối với tôi để khiến mọi thứ hoạt động.


3

Tôi đã đến cùng một vấn đề. Đã sửa lỗi này bằng cách chạy lệnh "rbenv global" với "sudo". Tôi nghĩ đó là một vấn đề cho phép.

cập nhật: Cuối cùng tôi đã tìm thấy giải pháp. Có một tệp "phiên bản" tương tự trên máy Mac của tôi, nằm dưới "/usr/local/Cellar/rbenv/0.3.0/". Tôi nghĩ rằng đôi khi nó được tạo ra bởi sai lầm. bạn nên loại bỏ nó


3

Khi tôi gặp phải những triệu chứng này, vấn đề hóa ra là cài đặt đã thất bại nửa chừng đối với phiên bản Ruby mới mà tôi đang cố gắng chuyển sang mà không để ý. Cách khắc phục là xóa và cài đặt lại.

(Điều này có nghĩa là mặc dù ruby ​​1.9.3 xuất hiện trong danh sách rbenv của các phiên bản có sẵn, nhưng nó không có khả năng thực thi trên con đường mà rbenv đã giả định. Vì rbenv cố gắng thay đổi phiên bản ruby ​​của bạn chỉ bằng cách thêm một vị trí vào đường dẫn của bạn, nếu không có gì thực sự ở vị trí mà nó chuẩn bị, hệ điều hành của bạn sẽ vui vẻ tiếp tục tìm kiếm đường dẫn mặc định của bạn và tìm phiên bản hệ thống của bạn, trong trường hợp của tôi như câu hỏi 1.8.7.)


3

cho người dùng vỏ cá

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

2

Điều này xảy ra với tôi ngay sau khi tôi cài đặt lại rbenv. Rõ ràng tôi đã có một .ruby-versiontập tin trong thư mục nhà của mình, chỉ định một phiên bản không còn tồn tại. Khi tôi xóa tập tin, mọi thứ đều hoạt động.


2

Đảm bảo dòng cuối cùng của bạn .bash_profilelà:

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

1

Câu trả lời được chấp nhận đề nghị thêm vào như sau:

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

Điều này sẽ không hoạt động trên Mac OSX, mà OP tham chiếu. Trong thực tế, nếu bạn cài đặt rbenv qua brew install rbenv, đây thực sự là phương pháp cài đặt duy nhất trong Mac OSX, vì curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bashFAIL sẽ trong OSX, thì thực thi rbenv sẽ được cài đặt trong:

$ which rbenv
/usr/local/bin/rbenv

Tuy nhiên, ngay cả trong OSX, gốc rbenv sẽ vẫn còn trong thư mục $ HOME:

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

Điều đó có nghĩa là gì? Điều đó có nghĩa là khi bạn cài đặt hồng ngọc, chúng sẽ cài đặt trong thư mục nhà cụ thể trong .rbenv:

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

Bây giờ việc cài đặt brew đã thực hiện một số công việc mà bạn sẽ phải thực hiện thủ công trong Linux. Ví dụ: trong Linux, bạn sẽ phải cài đặt ruby-build thủ công dưới dạng plugin:

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

Điều này đã được thực hiện với cài đặt homebrew. Có một bước quan trọng phải được thực hiện trong cài đặt homebrew, như trong cài đặt Linux. Bạn phải thêm các miếng chêm rbenv vào đường dẫn của bạn. Để làm điều đó, khi shell của bạn bắt đầu, bạn phải đánh giá lệnh sau (lần lượt sẽ thêm các rimsv shims vào đầu $ PATH của bạn):

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

Bây giờ khi bạn chạy echo $PATH, bạn sẽ thấy các miếng chêm rbenv:

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

Bây giờ hãy kiểm tra phiên bản ruby ​​của bạn và nó sẽ phản ánh ruby ​​rbenv được cài đặt:

ruby -v
ruby 2.6.0p0 

0

Thật kỳ lạ, phiên bản rbenv không đặt tệp .rbenv Kiểm tra với: ls -ltra -> để thấy rằng một rbenv đã được viết


0

Bạn có thể thử sử dụng chruby ? chruby không dựa vào miếng chêm, thay vào đó nó chỉ đổi PATH, GEM_HOME, GEM_PATH.


-1

Tôi quên xóa rvm trước khi cài đặt rbenv. Tôi đã xóa rvm và cài đặt lại rbenv, nhưng hệ thống vẫn không sử dụng phiên bản Ruby được rbenv chỉ định là toàn cầu. Tôi đã thử tắt Terminal, nhưng nó chỉ hoạt động khi tôi khởi động lại toàn bộ máy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.