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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...