AL2023 中的 Ruby - Amazon Linux 2023

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AL2023 中的 Ruby

Ruby AL2023 中的 是以 3.2 和 3.4 版表示。Amazon Linux 遵循上游支援排程,且任何Ruby版本的支援狀態都可以在 Ruby 網站上檢查。所有支援的Ruby版本都是命名空間,並且可以同時安裝在相同的系統上。Namespacing 可確保每個Ruby安裝在檔案系統中都是唯一的。這可透過根據執行時間版本重新命名金鑰目錄和檔案來實現。實際可執行檔名稱看起來像 ruby{MAJOR.MINOR} (例如 ruby3.2ruby3.4)。 Ruby 3.4 也提供 MRI (Matz 的Ruby解譯器) 命名空間二進位 ruby3.4-mri,其參考 的標準 C 型參考實作Ruby。不過,一次只能有一個Ruby版本處於作用中狀態。此作用中版本提供預設目錄和檔案名稱,例如 rubygembundle,將它們指向目前作用中的執行時間。

這是使用替代工具的功能來實現的。請務必記住,預設可執行檔名稱是虛擬的,當指向不同的已安裝Ruby版本時, 可能會隨時變更。此彈性可讓在 shebang 中使用 ruby 的軟體在調用時選取所需的版本。不過,當需要特定版本的 Ruby 時,可以透過呼叫命名空間可執行檔 (例如, ruby3.2ruby3.4) 來實現該版本的持久性,這將始終使用指定的執行時間版本。此外,GemBundler 工具的命名空間可執行檔,例如 ruby3.2-gemruby3.2-bundlerruby3.4-gemruby3.4-bundler,一律與對應的Ruby版本相關聯,無論目前作用中的執行時間為何。

Ruby 以數個以 "ruby{MAJOR.MINOR}" 開頭的命名空間套件來分佈。這些套件提供 Gem 套件套件工具、文件、程式庫等的 Ruby 相容版本。例如,核心 Ruby 3.2 執行期是由 ruby3.2套件提供,它會提取 ruby3.2-rubygems(提供 Gem) 和 ruby3.2-rubygem-bundler(提供 bundlebundler) 做為相依性。

安裝Ruby版本後,搭配工具的項目可能會在替代組態中顯示為 null。這可以透過執行 進行驗證alternatives --display ruby。如果項目顯示為 null,則必須使用 手動註冊alternatives --install。例如,若要註冊 3.4 Ruby 的所有配套工具:

sudo alternatives --install /usr/bin/gem gem /usr/bin/ruby3.4-gem 34 sudo alternatives --install /usr/bin/bundle bundle /usr/bin/ruby3.4-bundle 34 sudo alternatives --install /usr/bin/bundler bundler /usr/bin/ruby3.4-bundler 34 sudo alternatives --install /usr/bin/erb erb /usr/bin/ruby3.4-erb 34 sudo alternatives --install /usr/bin/racc racc /usr/bin/ruby3.4-racc 34 sudo alternatives --install /usr/bin/rdoc rdoc /usr/bin/ruby3.4-rdoc 34 sudo alternatives --install /usr/bin/ri ri /usr/bin/ruby3.4-ri 34

優先順序值 (例如,3.4 為 Ruby 34,3.2 為 Ruby 32) 應與主要 Ruby 替代項目中使用的優先順序相符。註冊後,配套工具將與 Ruby 替代方案一起自動管理。

替代工具提供單一命令以在Ruby版本之間切換。根據預設,替代方案會設定為處於自動模式,這會使用優先順序來判斷目前作用中的Ruby版本。不過,您可以隨時啟用任何已安裝的版本。目前,所有支援的 版本Ruby具有相同的優先順序,這表示將自動啟用第一個安裝的版本。

使用替代方案的一些實用範例
  1. 檢查針對 設定哪些替代方案

    alternatives --list
  2. 檢查 ruby 目前的組態

    alternatives --display ruby
  3. 以互動方式變更Ruby版本

    alternatives --config ruby
  4. 切換到手動模式並選取特定版本

    alternatives --set ruby /usr/bin/ruby{MAJOR.MINOR}
  5. 切換回自動版本選擇模式

    alternatives --auto ruby