rbenv:Ruby 多版本管理利器

来源:https://www.cnblogs.com/liam-i/p/18209426
-Advertisement-
Play Games

在 Ruby 開發的世界中,經常需要面對不同項目使用不同 Ruby 版本的情況。這時,一個高效、靈活且易於使用的 Ruby 版本管理工具就顯得尤為重要。 rbenv 正是這樣一個工具,它允許開發者在同一臺電腦上輕鬆安裝、切換和管理多個 Ruby 版本。本文將詳細介紹 rbenv 的安裝、基本使用以... ...


在 Ruby 開發的世界中,經常需要面對不同項目使用不同 Ruby 版本的情況。這時,一個高效、靈活且易於使用的 Ruby 版本管理工具就顯得尤為重要。

rbenv 正是這樣一個工具,它允許開發者在同一臺電腦上輕鬆安裝、切換和管理多個 Ruby 版本。本文將詳細介紹 rbenv 的安裝、基本使用以及一些高級特性,幫助你更好地掌握這個強大的工具。

rbenv 簡介

rbenv 是一個輕量級的 Ruby 版本管理工具,通過修改環境變數來控制當前使用的 Ruby 版本。它不會幹擾系統自帶的 Ruby 環境,而是為用戶提供一個隔離的 Ruby 運行環境。這意味著你可以根據項目需求,輕鬆切換到所需的 Ruby 版本,確保項目的相容性和運行穩定性。

安裝 rbenv

Homebrew 安裝

  1. 在 macOS (或 Linux) 系統上,建議使用 Homebrew 安裝 rbenv。詳細教程

    brew install rbenv ruby-build
    

    Homebrew 詳細教程可查看:

  2. 在 shell 中載入 rbenv

    運行下麵命令,並按照列印的說明進行操作:

    rbenv init
    

    例如,下麵這個示例,我們運行 rbenv init 後,提示將 eval "$(rbenv init - zsh)" 添加到 ~/.zshrc 文件中,才能自動載入 rbenv。

    $ rbenv init
    
    # Load rbenv automatically by appending
    # the following to ~/.zshrc:
    
    eval "$(rbenv init - zsh)"
    
  3. 執行 source ~/.zshrc 或者關閉終端視窗並打開一個新視窗,讓我們的更改生效。

克隆 Git 倉庫安裝

對於更自動化的安裝,可以使用 rbenv-installer。如果更喜歡手動方法安裝,請按照以下步驟操作。

  1. 將 rbenv 克隆到 ~/.rbenv:

    git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    
  2. 配置 shell 來載入 rbenv: 詳細教程

    • 對於 bash:

      在 macOS (或 Linux) 系統上,bash 通常通過以下方式配置 ~/.bash_profile:

      echo 'eval "$(~/.rbenv/bin/rbenv init - bash)"' >> ~/.bash_profile
      
    • 對於 Zsh:

      echo 'eval "$(~/.rbenv/bin/rbenv init - zsh)"' >> ~/.zshrc
      

    如果你好奇,請查看此處以瞭解 init 的作用

  3. 執行 source ~/.zshrc 或者關閉終端視窗並打開一個新視窗,讓我們的更改生效。

卸載 rbenv

rbenv 的簡單性使得臨時禁用或從系統中卸載它變得很容易。詳細教程

  1. 禁用 rbenv 管理你的 Ruby 版本,只需從 shell 啟動配置中註釋或刪除 rbenv init 行即可。這將從 PATH 中刪除 rbenv shims 目錄,並且將以後的使用(例如 ruby)將執行系統版本 Ruby,完全繞過 rbenv。

    禁用後,rbenv 仍可在命令行上訪問,但你的 Ruby 應用程式不會受到版本切換的影響。

  2. 要完全卸載 rbenv,請執行步驟(1),然後刪除 rbenv 根目錄。這將刪除安裝在 `rbenv root`/versions/ 下的所有 Ruby 版本:

    rm -rf "$(rbenv root)"
    

    如果你已使用包管理器安裝了 rbenv,則最後一步執行 rbenv 包刪除:

    • Homebrew:brew uninstall rbenv
    • Debian、Ubuntu 及其衍生版本:sudo apt purge rbenv
    • Archlinux 及其衍生版本:sudo pacman -R rbenv

rbenv 基本使用

安裝 Ruby 版本

rbenv install 命令不隨 rbenv 一起提供,而是由 ruby​​-build 插件提供。

在嘗試安裝 Ruby 之前,請檢查你的構建環境是否具有必要的工具和庫。然後:

rbenv install -l     # 列出最新的穩定版本
rbenv install -L     # 列出所有本地版本
rbenv install 3.3.0  # 安裝 Ruby 版本

要對 BUILD FAILED 場景進行故障排除,請查看 ruby-build 討論部分

如果 rbenv install 命令找不到,你可以將 ruby-build 作為插件安裝:

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

設置 Ruby 版本

安裝完後,需要設置 Ruby 版本以完成安裝並開始使用 Ruby,你可以使用 rbenv versions 命令查看已安裝的版本列表。要切換/設置到特定版本,請運行:

rbenv global 3.3.0   # 設置本機的預設 Ruby 版本,你可以替換為你已安裝的版本號
# 或:
rbenv local 3.3.0    # 設置該目錄的 Ruby 版本,你可以替換為你已安裝的版本號
# 或:
rbenv shell 3.3.0   # shell 環境,切換到 Ruby 3.3.0 版本,你可以替換為你已安裝的版本號

除了 rbenv install 命令之外,你還可以手動下載並編譯 Ruby 作為 ~/.rbenv/versions 的子目錄。該目錄中的內容也可以是安裝在文件系統其他位置的 Ruby 版本的符號鏈接。

安裝 Ruby gem

例如,使用 rbenv local 3.3.0 為你的項目選擇 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 版本

隨著時間的推移,你安裝的 Ruby 版本將累積在 ~/.rbenv/versions 目錄中。

要刪除舊的 Ruby 版本,只需 rm -rf 你要刪除的版本的目錄即可。你可以使用 rbenv prefix 命令查找特定 Ruby 版本的目錄,例如 rbenv prefix 3.3.0

ruby-build 插件提供了 rbenv uninstall 命令來自動執行刪除過程。

rbenv uninstall 3.3.0  # 自動執行刪除 Ruby 版本

常用命令

你需要瞭解的主要 rbenv 命令是。詳細教程

rbenv versions

列出 rbenv 已知的所有 Ruby 版本,併在當前活動版本旁邊顯示一個星號。

$ rbenv versions
  system
  2.7.4
* 3.3.0 (set by /Users/liam/.rbenv/version)
  jruby-9.4.6.0
  mruby-3.3.0
  truffleruby-24.0.1

rbenv version

顯示當前活動的 Ruby 版本,以及有關其設置方式的信息。

$ rbenv version
3.3.0 (set by /Users/liam/.rbenv/version)

rbenv local

通過將版本名稱寫入當前目錄中的 .ruby-version 文件來設置本地應用程式特定的 Ruby 版本。此版本覆蓋全局版本,並且可以通過設置 RBENV_VERSION 環境變數或使用 rbenv shell 命令來覆蓋自身。

rbenv local 3.1.2

當不帶版本號運行時,rbenv local 會報告當前配置的本地版本。你還可以取消設置本地版本:

rbenv local --unset

rbenv global

通過將版本名稱寫入 ~/.rbenv/version 文件來設置要在所有 shell 中使用的 Ruby 全局版本。此版本可以通過特定於應用程式的 .ruby-version 文件或通過設置 RBENV_VERSION 環境變數來覆蓋。

rbenv global 3.1.2

特殊版本名稱 system 告訴 rbenv 使用系統 Ruby(通過搜索 $PATH 來檢測)。

當沒有版本號運行時,rbenv global 報告當前配置的全局版本。

rbenv shell

通過在 shell 中設置 RBENV_VERSION 環境變數來設置特定於 shell 的 Ruby 版本。此版本覆蓋特定於應用程式的版本和全局版本。

rbenv shell jruby-9.4.6.0

當沒有版本號運行時,rbenv shell 會報告 RBENV_VERSION 的當前值。你還可以取消設置 shell 版本:

rbenv shell --unset

請註意,你需要啟用 rbenv 的 shell 集成(安裝說明的步驟 3)才能使用此命令。如果你不想使用 shell 集成,你可以簡單地自己設置 RBENV_VERSION 變數:

export RBENV_VERSION=jruby-9.4.6.0

rbenv rehash

為 rbenv 已知的所有 Ruby 可執行文件安裝 shims (~/.rbenv/versions/*/bin/*)。通常你不需要運行此命令,因為它會在安裝 gems 後自動運行。

rbenv rehash

rbenv which

顯示給定可執行文件的,的完整路徑。

$ rbenv which irb
/Users/liam/.rbenv/versions/3.3.0/bin/irb

rbenv whence

列出包含指定可執行文件名稱的所有 Ruby 版本。

$ rbenv whence rackup
3.3.0
jruby-9.4.6.0
truffleruby-24.0.1

環境變數

名稱 預設 描述
RBENV_VERSION 指定要使用的 Ruby 版本。另請參閱 rbenv shell
RBENV_ROOT ~/.rbenv 定義 Ruby 版本和 shims 所在的目錄。另請參閱 rbenv root
RBENV_DEBUG 輸出調試信息。例如:rbenv --debug <subcommand>
RBENV_HOOK_PATH 查看 wiki 搜索 rbenv hooks 查看路徑列表
RBENV_DIR $PWD 開始搜索 .ruby-version 文件的目錄

插件支持

rbenv 還支持通過插件來擴展功能。例如,ruby-buildrbenv-vars 插件可以讓你更方便地安裝和管理 Ruby 版本。你可以通過 Homebrew 或直接從 Git 倉庫安裝這些插件,並使用它們來簡化 Ruby 版本的安裝和管理過程。

ruby-build

安裝 ruby-build 插件的命令如下。詳細教程

# 通過 Homebrew 安裝
brew install ruby-build

# 或者通過 Git 安裝
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

安裝完成後,你可以使用 ruby-build 命令來安裝和管理 Ruby 版本,而無需手動下載和編譯 Ruby 源代碼。

ruby-vars

安裝 rbenv-vars 插件的命令如下。詳細教程

# 通過 Homebrew 安裝
brew install rbenv-vars

# 或者通過 Git 安裝
git clone https://github.com/rbenv/rbenv-vars.git "$(rbenv root)"/plugins/rbenv-vars

安裝完成後,你可以使用 ruby-vars 命令讓你在生成 Ruby 進程之前設置全局和特定於項目的環境變數。

結語

rbenv 是一個功能強大的 Ruby 版本管理工具,它允許開發者在同一臺電腦上輕鬆安裝、切換和管理多個 Ruby 版本。通過使用 rbenv,你可以確保你的項目在正確的 Ruby 環境中運行,從而提高開發效率和代碼質量。

隨著 Ruby 生態系統的不斷發展,rbenv 將繼續成為開發者不可或缺的工具之一。希望本文能幫助你更好地理解和使用 rbenv,為你的 Ruby 開發之旅提供便利!

相關鏈接


訪問博址 liam-i.github.io 獲取更佳閱讀體驗和最新內容。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • node-sass 安裝過程 npm 拉下 node-sass包; 根據node版本和node-sass版本拉取對應的binding.node編譯器,原因是sass的編譯語言比較特殊,需要下載對應版本的編譯器才能編譯;(node scripts/install.js 階段) 如果能拉下binding ...
  • 本文分享自華為雲社區《npm install -g 和 npm install --save-dev 的關係》,作者: SHQ5785。 一、npm install 本地安裝 將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄, ...
  • form-create-designer 是基於 @form-create/element-ui實現的表單設計器組件。可以通過拖拽的方式快速創建表單,提高開發者對錶單的開發效率,節省開發者的時間。 ...
  • 正文 4T 硬碟降價了,好心動。雖然只降了 10 塊錢……. 為什麼硬碟這麼貴啊!哼。 櫃面上雜事好多。雖然一天到晚見不到幾個客戶,但雜事就是很多。一個頭兩個大。也不知道從哪兒冒出來的這麼多事。 芒果乾到了!還沒去取,希望好吃 w。 今天真的好睏好睏,感覺從沒這麼困過。早上一睜眼,剛剛好 8:30, ...
  • 大家好,我是R哥。 最近,R哥分享了兩個特別有意思的面試輔導成功案例: 35K*14 薪入職了,這公司只要不裁員,我能一直呆下去。。 幹了 2 年多 Java 外包,終於脫離了! 今天再分享一個振奮人心的面試輔導 case: 這個兄弟空窗期 5 個月,0 Offer,面試一問項目就掛,報名面試輔導, ...
  • 提供靜態內容 配置 NGINX 和 NGINX Plus 以提供靜態內容,使用類型特定的根目錄,檢查文件存在性,併進行性能優化。 本節介紹如何配置 NGINX 和 NGINX Plus 以提供靜態內容,如何定義搜索請求文件的路徑,如何設置索引文件,以及如何調整 NGINX 和 NGINX Plus ...
  • C-10.索引優化與查詢優化 都有那些維度可以進行資料庫調優?簡言之: 索引失效,沒有充分利用到索引 -- 索引建立 關聯查詢太多JOIN(設計缺陷或不得已的需求) -- SQL優化 伺服器調優及各個參數設置(緩衝,線程數等) -- 調整my.cnf 數據過多 -- 分庫分表 關於資料庫調優的知識點 ...
  • 正態分佈(高斯分佈)是重要的概率模型,具有鐘形曲線特征,由均值μ和標準差σ描述。NumPy的`random.normal()`可生成正態分佈隨機數,Seaborn庫方便繪製分佈圖。正態分佈廣泛應用於統計學、機器學習、金融和工程等領域。練習包括生成正態分佈數據、比較不同標準差影響及模擬考試成績計算平均... ...
一周排行
    -Advertisement-
    Play Games
  • 問題 有很多應用程式在驗證JSON數據的時候用到了JSON Schema。 在微服務架構下,有時候各個微服務由於各種歷史原因,它們所生成的數據對JSON Object屬性名的大小寫規則可能並不統一,它們需要消費的JSON數據的屬性名可能需要大小寫無關。 遺憾的是,目前的JSON Schema沒有這方 ...
  • 首先下載centos07鏡像,建議使用阿裡雲推薦的地址: https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.59b5f5ad5Nfr0X 其實這裡就已經出現第一個坑了 centos 07 /u ...
  • 相信很多.NETer看了標題,都會忍不住好奇,點進來看看,並且順便準備要噴作者! 這裡,首先要申明一下,作者本人也非常喜歡Linq,也在各個項目中常用Linq。 我愛Linq,Linq優雅萬歲!!!(PS:順便吐槽一下,隔壁Java從8.0版本推出的Streams API,抄了個四不像,一點都不優雅 ...
  • 在人生的重要時刻,我站在了畢業的門檻上,望著前方的道路,心中涌動著對未來的無限憧憬與些許忐忑。面前,兩條道路蜿蜒伸展:一是繼續在職場中尋求穩定,一是勇敢地走出一條屬於自己的創新之路。儘管面臨年齡和現實的挑戰,我仍舊選擇勇往直前,用技術這把鑰匙,開啟新的人生篇章。 迴首過去,我深知時間寶貴,精力有限。 ...
  • 單元測試 前言 時隔多個月,終於抽空學習了點新知識,那麼這次來記錄一下C#怎麼進行單元測試,單元測試是做什麼的。 我相信大部分剛畢業的都很疑惑單元測試是乾什麼的?在小廠實習了6個月後,我發現每天除了寫CRUD就是寫CRUD,幾乎用不到單元測試。寫完一個功能直接上手去測,當然這隻是我個人感受,僅供參考 ...
  • 一:背景 1. 講故事 最近在分析dump時,發現有程式的卡死和WeakReference有關,在以前只知道怎麼用,但不清楚底層邏輯走向是什麼樣的,藉著這個dump的契機來簡單研究下。 二:弱引用的玩法 1. 一些基礎概念 用過WeakReference的朋友都知道這裡面又可以分為弱短和弱長兩個概念 ...
  • 最近想把ET打表工具的報錯提示直接調用win系統彈窗,好讓策劃明顯的知道表格哪裡填錯數據,彈窗需要調用System.Windows.Forms庫。操作如下: 需要在 .csproj 文件中添加: <UseWindowsForms>true</UseWindowsForms> 須將目標平臺設置為 Wi ...
  • 從C#3開始,拓展方法這一特性就得到了廣泛的應用。 此功能允許你能夠使用實例方法的語法調用某個靜態方法,以下是一個獲取/創建文件的靜態方法: public static async Task<StorageFile> GetOrCreateFileAsync(this StorageFolder f ...
  • 在Windows 11下,使用WinUI2.6以上版本的ListView長這樣: 然而到了Win10上,儘管其他控制項的樣式沒有改變,但ListViewItem變成了預設樣式(初代Fluent) 最重大的問題是,Win10上的HorizontalAlignment未被設置成Stretch,可能造成嚴重 ...
  • 前言 周六在公司加班,幹完活後越顯無聊,想著下載RabbiitMQ做個小項目玩玩。然而這一下就下載了2個小時,真讓人頭痛。 簡單的講一下如何安裝吧,網上教程和踩坑文章還是很多的,我講我感覺有用的文章放在本文末尾。 安裝地址 erlang 下載 - Erlang/OTP https://www.erl ...