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, gemvà 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/shimstheo 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 rubytừ 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/rubytrước và chạy nó thay vì bất kỳ tập lệnh rubythự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, irbtương đương rbenv exec irbvà ruby -e "puts 42"tương đương với rbenv exec ruby -e "puts 42".
Các rbenv execcon 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_VERSIONbiế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-versiontệp, nội dung của nó được sử dụng để đặt RBENV_VERSIONbiến môi trường.
- Nếu không có
.rbenv-versiontệ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-versiontệ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_VERSIONbiến môi trường.
- Nếu
RBENV_VERSIONvẫn không được đặt, rbenv cố gắng đặt nó bằng cách sử dụng nội dung của ~/.rbenv/versiontệ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 locallệnh tạo .rbenv-versiontệp trong thư mục hiện tại. Tương tự, rbenv globallệnh sẽ sửa đổi ~/.rbenv/versiontệp.)
Được trang bị một RBENV_VERSIONbiến môi trường, rbenv thêm ~/.rbenv/versions/$RBENV_VERSION/binvà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=1và 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.