Giải thích ngắn gọn: rbenv hoạt động bằng cách gắn vào môi trường PATH
của môi trường của bạn. Khái niệm này rất đơn giản, nhưng ma quỷ ở trong các chi tiết; đầy đủ muỗng dưới đây.
Thứ nhất, rbenv tạo shims cho tất cả các lệnh (ruby
, irb
, rake
, gem
và vân vân) trên tất cả các phiên bản cài đặt của bạn của Ruby. Quá trình này được gọi là rehashing. Mỗi khi bạn cài đặt một phiên bản mới của Ruby hoặc cài đặt một gem cung cấp một lệnh, hãy chạy rbenv rehash
để đảm bảo mọi lệnh mới được shimmed.
Các miếng chêm này sống trong một thư mục duy nhất (~/.rbenv/shims
theo mặc định). Để sử dụng rbenv, bạn chỉ cần thêm thư mục miếng chêm vào phía trước của PATH
của bạn:
export PATH="$HOME/.rbenv/shims:$PATH"
Sau đó, bất cứ lúc nào bạn chạy ruby
từ dòng lệnh, hoặc chạy một kịch bản mà công việc đọc #!/usr/bin/env ruby
, hệ điều hành của bạn sẽ tìm thấy ~/.rbenv/shims/ruby
trước tiên và chạy nó thay vì bất kỳ tệp thực thi ruby
nào khác mà bạn có thể đã cài đặt.
Mỗi shim là một tập lệnh Bash nhỏ mà lần lượt chạy rbenv exec
. Vì vậy, với rbenv trong đường dẫn của bạn, irb
tương đương với rbenv exec irb
và ruby -e "puts 42"
tương đương với rbenv exec ruby -e "puts 42"
.
Lệnh rbenv exec
chỉ ra phiên bản Ruby bạn muốn sử dụng, sau đó chạy lệnh tương ứng cho phiên bản đó. Đây là cách:
- Nếu biến
RBENV_VERSION
môi trường được thiết lập, giá trị của nó xác định phiên bản của Ruby để sử dụng.
- Nếu thư mục làm việc hiện tại có tệp
.rbenv-version
, nội dung của nó được sử dụng để đặt biến môi trường RBENV_VERSION
.
- Nếu không có tệp
.rbenv-version
trong thư mục hiện tại, rbenv tìm kiếm mỗi thư mục mẹ cho một tệp .rbenv-version
cho đến khi nó truy cập vào thư mục gốc của hệ thống tệp của bạn. Nếu tìm thấy, nội dung của nó được sử dụng để đặt biến môi trường RBENV_VERSION
.
- Nếu
RBENV_VERSION
vẫn chưa được đặt, rbenv sẽ cố gắng đặt nó bằng nội dung của tệp ~/.rbenv/version
.
- Nếu không có phiên bản nào được chỉ định ở bất kỳ đâu, rbenv giả sử bạn muốn sử dụng "hệ thống" Ruby — nghĩa là. bất kỳ phiên bản nào sẽ được chạy nếu rbenv không nằm trong đường dẫn của bạn.
(Bạn có thể đặt một phiên bản Ruby dự án cụ thể với rbenv local
lệnh, mà tạo ra một tập tin .rbenv-version
trong thư mục hiện hành. Tương tự như vậy, lệnh rbenv global
đổi các tập tin ~/.rbenv/version
.)
vũ trang với một RBENV_VERSION
biến môi trường, rbenv thêm ~/.rbenv/versions/$RBENV_VERSION/bin
vào mặt trước của PATH
, sau đó thực thi lệnh và đối số được chuyển đến rbenv exec
. Thì đấy!
Để tìm hiểu chính xác những gì xảy ra dưới mui xe, hãy thử đặt RBENV_DEBUG=1
và chạy lệnh Ruby. Mỗi lệnh Bash mà rbenv chạy sẽ được ghi vào terminal của bạn.
Bây giờ, rbenv là chỉ quan tâm đến phiên bản chuyển đổi, nhưng một hệ sinh thái thịnh vượng của plugin sẽ giúp bạn làm tất cả mọi thứ installing Ruby-setting up your environment, managing "gemsets" và thậm chí automating bundle exec
.
Tôi không hoàn toàn chắc chắn về hỗ trợ của IRC đối với việc chuyển đổi các phiên bản Ruby và rbenv được thiết kế đơn giản và dễ hiểu, không yêu cầu hỗ trợ. Nhưng nếu bạn cần trợ giúp, trình theo dõi vấn đề và Twitter chỉ là một vài lần nhấp chuột.
Tiết lộ: Tôi là tác giả của rbenv, ruby-build và rbenv-vars.
Cảm ơn bạn đã dành thời gian để đưa ra một câu trả lời tuyệt vời như vậy. – superluminary
Wow, cảm ơn vì lời giải thích dễ hiểu và dễ hiểu như vậy. Một giáo viên tự nhiên sinh ra. – racl101
dường như .ruby-phiên bản cũng sẽ làm như vậy. – alexzg