

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

# AL2023 中的 Ruby
<a name="ruby"></a>

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

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

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

 安裝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
   ```

1. 檢查 *ruby* 目前的組態

   ```
   alternatives --display ruby
   ```

1. 以互動方式變更Ruby版本

   ```
   alternatives --config ruby
   ```

1. 切換到手動模式並選取特定版本

   ```
   alternatives --set ruby /usr/bin/ruby{MAJOR.MINOR}
   ```

1. 切換回自動版本選擇模式

   ```
   alternatives --auto ruby
   ```