Giải thích ngắn gọn: rbenv hoạt động bằng cách móc vào môi trường của bạn PATH
. Khái niệm này là đơn giản, nhưng ma quỷ là trong các chi tiết; đầy đủ muỗng bên dưới.
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à luyện lại . Mỗi khi bạn cài đặt phiên bản mới của Ruby hoặc cài đặt đá quý cung cấp lệnh, hãy chạy rbenv rehash
để đảm bảo mọi lệnh mới đều được hiển thị.
Những 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 shims vào phía trước PATH
:
export PATH="$HOME/.rbenv/shims:$PATH"
Sau đó, bất cứ khi nào bạn chạy ruby
từ dòng lệnh hoặc chạy tập lệnh mà shebang đọc #!/usr/bin/env ruby
, hệ điều hành của bạn sẽ tìm thấy ~/.rbenv/shims/ruby
trước và chạy nó thay vì bất kỳ tập lệnh ruby
thực thi nào khác mà bạn có thể đã cài đặt.
Mỗi shim là một đoạn script Bash nhỏ 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 rbenv exec irb
và ruby -e "puts 42"
tương đương với rbenv exec ruby -e "puts 42"
.
Các rbenv exec
con số lệnh ra những phiên bản của Ruby bạn muốn sử dụng, sau đó chạy các lệnh tương ứng cho phiên bản đó. Đây là cách thực hiện:
- Nếu
RBENV_VERSION
biến môi trường được đặt, giá trị của nó sẽ xác định phiên bản của Ruby sẽ sử dụng.
- Nếu thư mục làm việc hiện tại có một
.rbenv-version
tệp, nội dung của nó được sử dụng để đặt RBENV_VERSION
biến môi trường.
- Nếu không có
.rbenv-version
tệp nào trong thư mục hiện tại, rbenv tìm kiếm từng thư mục cha cho một .rbenv-version
tệp cho đến khi nó chạm vào thư mục gốc của hệ thống tệp của bạn. Nếu một cái được tìm thấy, nội dung của nó được sử dụng để đặt RBENV_VERSION
biến môi trường.
- Nếu
RBENV_VERSION
vẫn không được đặt, rbenv cố gắng đặt nó bằng cách sử dụng nội dung của ~/.rbenv/version
tệp.
- Nếu không có phiên bản nào được chỉ định ở bất cứ đâu, rbenv giả định rằng bạn muốn sử dụng "hệ thống" Ruby Biệt, 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.
(Bạn có thể đặt phiên bản Ruby dành riêng cho dự án bằng rbenv local
lệnh tạo .rbenv-version
tệp trong thư mục hiện tại. Tương tự, rbenv global
lệnh sẽ sửa đổi ~/.rbenv/version
tệp.)
Được trang bị một RBENV_VERSION
biến môi trường, rbenv thêm ~/.rbenv/versions/$RBENV_VERSION/bin
vào phía trước của bạn PATH
, sau đó thực thi lệnh và các đối số được truyền cho rbenv exec
. Voila!
Để có cái nhìn thấu đáo về chính xác những gì xảy ra dưới mui xe, hãy thử cài đặt RBENV_DEBUG=1
và chạy lệnh Ruby. Mỗi lệnh Bash mà rbenv chạy sẽ được ghi vào thiết bị đầu cuối của bạn.
Bây giờ, rbenv chỉ quan tâm đến việc chuyển đổi các phiên bản, nhưng một hệ sinh thái thịnh vượng của các plugin sẽ giúp bạn làm mọi thứ, từ cài đặt Ruby đến thiết lập môi trường của bạn , quản lý "đá quý" và thậm chí tự động hóabundle exec
.
Tôi không chắc chắn những gì hỗ trợ IRC phải làm khi 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 cú nhấp chuột.
Tiết lộ: Tôi là tác giả của rbenv, ruby-build và rbenv-vars.