rbenv 是類別 Unix 系統上 Ruby 程式語言的版本管理器工具。它對於在同一台電腦上的多個 Ruby 版本之間切換以及確保您正在處理的每個專案始終在正確的 Ruby 版本上運行非常有用。
rbenv 在安裝時將自身註入到您的 PATH 中後,任何對ruby
、 gem
、 bundler
或其他 Ruby 相關可執行檔的呼叫都將首先啟動 rbenv 。然後, rbenv 掃描目前專案目錄中名為.ruby-version
檔案。如果找到,該檔案將確定應在該目錄中使用的 Ruby 版本。最後, rbenv 在~/.rbenv/versions/
下安裝的版本中尋找該 Ruby 版本。
您可以為您的專案選擇 Ruby 版本,例如:
cd myproject
# choose Ruby version 3.1.2:
rbenv local 3.1.2
這樣做將使用您選擇的版本在當前目錄中建立或更新.ruby-version
檔案。您的另一個目錄中的不同項目可能正在使用完全不同的 Ruby 版本 - 當您切換專案時,rbenv 將從一個 Ruby 版本無縫過渡到另一個版本。
最後,rbenv 機制的幾乎每個方面都可以透過 bash 編寫的插件進行客製化。
rbenv 的簡單性有其優點,但也有一些缺點。有關更多詳細資訊和一些替代方案,請參閱版本管理器的比較。
在具有 Homebrew 套件管理器的系統上,建議使用「使用套件管理器」方法。在其他系統上,「Basic Git Checkout」可能是確保始終安裝最新版本的 rbenv 的最簡單方法。
使用以下方法之一安裝 rbenv。
在 macOS 或 Linux 上,我們建議使用 Homebrew 安裝 rbenv。
brew install rbenv
[!
在官方 Debian 和 Ubuntu 儲存庫中打包和維護的 rbenv 版本已經過時。要安裝最新版本,建議使用 git 安裝 rbenv。
sudo apt install rbenv
Archlinux 有一個適用於 rbenv 的 AUR 軟體包,您可以使用此 wiki 頁面中的說明從 AUR 安裝它。
Fedora 有一個官方軟體包,您可以安裝:
sudo dnf install rbenv
設定您的 shell 來載入 rbenv。
rbenv init
關閉終端機窗口並開啟一個新窗口,以便您的變更生效。
就是這樣!現在您可以安裝一些 Ruby 版本了。
筆記
對於更自動化的安裝,您可以使用 rbenv-installer。如果您不想執行從 Web URL 下載的腳本或只是更喜歡手動方法,請按照以下步驟操作。
這將使您可以使用最新版本的 rbenv,而無需進行系統範圍的安裝。
將 rbenv 克隆到~/.rbenv
。
git clone https://github.com/rbenv/rbenv.git ~ /.rbenv
設定您的 shell 來載入 rbenv。
~ /.rbenv/bin/rbenv init
如果您好奇,請參閱此處以了解init
作用。
重新啟動 shell 以使這些變更生效。 (打開一個新的終端選項卡通常就可以了。)
手動安裝 rbenv 時,注意各種 shell 的完成腳本如何運作可能會很有用。完成腳本透過擴展部分輸入的 rbenv 命令名稱和選項標誌來幫助鍵入 rbenv 命令;通常,這是透過在互動式 shell 中按Tab鍵來呼叫的。
rbenv 的bash完成腳本隨專案一起提供,並由rbenv init
機制載入。
zsh完成腳本隨專案一起提供,但需要加入 zsh 中的 FPATH 中,然後 shell 才能發現它。一種方法是編輯~/.zshrc
:
# assuming that rbenv was installed to `~/.rbenv`
FPATH= ~ /.rbenv/completions: " $FPATH "
autoload -U compinit
compinit
rbenv 的Fish完成腳本隨 Fish shell 本身一起提供,並且不由 rbenv 專案維護。
rbenv install
指令並非隨 rbenv 一起提供,而是由 ruby-build 外掛程式提供。
在嘗試安裝 Ruby 之前,請檢查您的建置環境是否具有必要的工具和程式庫。然後:
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
# install a Ruby version:
rbenv install 3.1.2
若要對BUILD FAILED
場景進行故障排除,請查看 ruby-build 討論部分。
筆記
如果沒有找到rbenv install
命令,您可以將 ruby-build 作為插件安裝:
git clone https://github.com/rbenv/ruby-build.git " $( rbenv root ) " /plugins/ruby-build
設定 Ruby 版本以完成安裝並開始使用 Ruby:
rbenv global 3.1.2 # set the default Ruby version for this machine
# or:
rbenv local 3.1.2 # set the Ruby version for this directory
除了rbenv install
指令之外,您還可以手動下載並編譯 Ruby 作為~/.rbenv/versions
的子目錄。該目錄中的條目也可以是安裝在檔案系統其他位置的 Ruby 版本的符號連結。
例如,使用rbenv local 3.1.2
為您的專案選擇 Ruby 版本。然後,像平常一樣繼續安裝 gems:
gem install bundler
筆記
您不應該使用 sudo來安裝 gem。通常,Ruby 版本將安裝在您的主目錄下,因此您的使用者可以寫入。如果您在安裝 gems 時收到「您沒有寫入權限」錯誤,則很可能您的「系統」Ruby 版本仍然是全域預設版本。使用rbenv global <version>
更改它,然後重試。
使用gem env
檢查 gem 的安裝位置:
gem env home
# => ~/.rbenv/versions/<version>/lib/ruby/gems/...
隨著時間的推移,您安裝的 Ruby 版本將累積在~/.rbenv/versions
目錄中。
要刪除舊的 Ruby 版本,只需rm -rf
您要刪除的版本的目錄。您可以使用rbenv prefix
指令來尋找特定 Ruby 版本的目錄,例如rbenv prefix 2.7.0
。
ruby-build 外掛提供了rbenv uninstall
指令來自動執行刪除過程。
您需要了解的主要 rbenv 指令是:
列出 rbenv 已知的所有 Ruby 版本,並在目前活動版本旁邊顯示一個星號。
$ rbenv versions
1.8.7-p352
1.9.2-p290
* 1.9.3-p327 (set by /Users/sam/.rbenv/version)
jruby-1.7.1
rbx-1.2.4
ree-1.8.7-2011.03
顯示目前活動的 Ruby 版本,以及有關其設定方式的資訊。
$ rbenv version
1.9.3-p327 (set by /Users/sam/.rbenv/version)
透過將版本名稱寫入目前目錄中的.ruby-version
檔案來設定本機應用程式特定的 Ruby 版本。此版本覆蓋全域版本,並且可以透過設定RBENV_VERSION
環境變數或使用rbenv shell
命令來覆蓋自身。
rbenv local 3.1.2
當不帶版本號運行時, rbenv local
會報告目前配置的本機版本。您也可以取消設定本機版本:
rbenv local --unset
透過將版本名稱寫入~/.rbenv/version
檔案來設定要在所有 shell 中使用的 Ruby 全域版本。此版本可以透過特定於應用程式的.ruby-version
檔案或透過設定RBENV_VERSION
環境變數來覆蓋。
rbenv global 3.1.2
特殊版本名稱system
告訴 rbenv 使用系統 Ruby(透過搜尋$PATH
偵測到)。
當不帶版本號運行時, rbenv global
會報告目前配置的全域版本。
透過在 shell 中設定RBENV_VERSION
環境變數來設定特定於 shell 的 Ruby 版本。此版本覆蓋特定於應用程式的版本和全域版本。
rbenv shell jruby-1.7.1
當沒有版本號運作時, rbenv shell
會報告RBENV_VERSION
的目前值。您也可以取消設定 shell 版本:
rbenv shell --unset
請注意,您需要啟用 rbenv 的 shell 整合(安裝說明的步驟 3)才能使用此命令。如果您不想使用 shell 集成,您可以簡單地自己設定RBENV_VERSION
變數:
export RBENV_VERSION=jruby-1.7.1
為 rbenv 已知的所有 Ruby 可執行檔安裝墊片 ( ~/.rbenv/versions/*/bin/*
)。通常您不需要執行此命令,因為它會在安裝 gems 後自動執行。
rbenv rehash
顯示在執行給定命令時 rbenv 將呼叫的可執行檔的完整路徑。
$ rbenv which irb
/Users/sam/.rbenv/versions/1.9.3-p327/bin/irb
列出包含指定可執行檔名稱的所有 Ruby 版本。
$ rbenv whence rackup
1.9.3-p327
jruby-1.7.1
ree-1.8.7-2011.03
您可以透過以下設定影響 rbenv 的運作方式:
姓名 | 預設 | 描述 |
---|---|---|
RBENV_VERSION | 指定要使用的 Ruby 版本。 另請參閱 rbenv shell | |
RBENV_ROOT | ~/.rbenv | 定義 Ruby 版本和墊片所在的目錄。 另請參閱 rbenv root |
RBENV_DEBUG | 輸出調試資訊。 也可作為: rbenv --debug <subcommand> | |
RBENV_HOOK_PATH | 參見維基百科 | 搜尋 rbenv 掛鉤的以冒號分隔的路徑清單。 |
RBENV_DIR | $PWD | 開始搜尋.ruby-version 檔案的目錄。 |
rbenv init
是一個幫助命令,用於將 rbenv 引導到 shell 中。此幫助程式是建議安裝說明的一部分,但可選,因為進階使用者可以手動設定以下任務。以下是該指令在啟動期間由 shell 對其輸出進行eval
時執行的操作:
如有必要,將rbenv
執行檔新增至 PATH。
將~/.rbenv/shims
目錄加入 PATH 之前。這基本上是 rbenv 正常運作的唯一要求。
安裝 rbenv 指令的 bash shell 補全。
重新生成 rbenv 墊片。如果此步驟減慢了 shell 啟動速度,您可以使用--no-rehash
標誌呼叫rbenv init -
。
安裝“sh”調度程式。該位元也是可選的,但允許 rbenv 和插件更改當前 shell 中的變量,從而使rbenv shell
等命令成為可能。
您可以自己執行rbenv init -
來檢查產生的腳本。
rbenv 的簡單性使得暫時停用它或從系統中卸載它變得容易。
若要停用rbenv 管理 Ruby 版本,只需從 shell 啟動設定中註解或刪除rbenv init
行即可。這將從 PATH 中刪除 rbenv shims 目錄,並且將來的呼叫(例如ruby
將執行系統 Ruby 版本,完全繞過 rbenv。
停用後, rbenv
仍可透過命令列訪問,但您的 Ruby 應用程式不會受到版本切換的影響。
若要完全卸載rbenv,請執行步驟(1),然後刪除rbenv根目錄。這將刪除安裝在`rbenv root`/versions/
下的所有 Ruby 版本:
rm -rf "$(rbenv root)"
如果您已使用套件管理器安裝了 rbenv,則最後一步執行 rbenv 套件刪除:
brew uninstall rbenv
sudo apt purge rbenv
sudo pacman -R rbenv
使用 Bats 執行測試:
$ bats test
$ bats test/<file>.bats
請隨時在問題追蹤器上提交拉取請求和文件錯誤。