

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Ruby在 AL2023
<a name="ruby"></a>

 [https://www.ruby-lang.org/en/](https://www.ruby-lang.org/en/)in AL2023 由 3.2 和 3.4 版本表示。Amazon Linux 遵循上游支持计划，任何Ruby版本的支持状态都可以随时在 [Ruby 网站上](https://www.ruby-lang.org/en/)查看。所有受支持的 Ruby 版本都是命名空间化的，并且可以同时安装在同一系统上。命名空间化确保每个 Ruby 安装在文件系统内是唯一的。这是通过根据运行时版本重命名关键目录和文件来实现的。实际的可执行文件名称将看起来像 r *uby {MAJOR.MINOR}*（例如，`ruby3.2`或`ruby3.4`）。 Ruby3.4 还提供了 MRI（Matz's Inter Ruby preter）命名空间二进制文件`ruby3.4-mri`，它指的是基于 C 的标准参考实现。Ruby但是，一次只能有一个 Ruby 版本处于活动状态。此活动版本提供了默认目录和文件名，例如 *ruby*、*gem* 或 *bundle*，将它们指向当前活动的运行时。

 这是利用 *alternatives* 工具的功能实现的。重要的是要记住，默认的可执行文件名是虚拟的，并且在指向不同安装的 Ruby 版本时可以随时更改。这种灵活性使在 shebang 中使用 *ruby* 的软件能够在调用时选择所需的版本。但是，当需要特定版本的Ruby时，可以通过调用命名空间可执行文件（例如`ruby3.2`或`ruby3.4`）来实现版本的持久性，该可执行文件将始终使用指定的运行时版本。此外，无论当前处于活动状态的运行时如何，*gem* 和*捆绑器*工具的命名空间可执行文件（例如`ruby3.4-bundler`、、或）始终与相应的Ruby版本相关联。`ruby3.2-gem` `ruby3.4-gem` `ruby3.2-bundler`

 Ruby以几个以 “” `ruby{MAJOR.MINOR}` 开头的命名空间包的形式分发。这些软件包提供了 *ruby*、兼容版本的 *gem* 和*捆绑器*工具、文档、库等。例如，core Ruby 3.2 运行时由`ruby3.2`软件包提供，它作为依赖项引入`ruby3.2-rubygems`（提供 *gem*）和`ruby3.2-rubygem-bundler`（提供*捆绑包*和*捆绑器*）。

 安装Ruby版本后，配套工具的条目可能会在*备选*配置中显示为空。这可以通过运行来验证`alternatives --display ruby`。如果条目显示为空，则必须使用手动注册`alternatives --install`。例如，要注册 Ruby 3.4 版的所有配套工具，请执行以下操作：

```
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 为 34，Ruby3. Ruby 2 为 32）应与主*红宝石*替代条目中使用的优先级相匹配。注册后，配套工具将与 *ruby* 替代工具一起自动管理。

 *alternatives* 工具提供了一个用于在 Ruby 版本之间切换的单一命令。默认情况下，*alternatives* 被配置为处于自动模式，该模式使用优先级来确定当前活动的 Ruby 版本。然而，您可以随时激活任何已安装的版本。目前，所有受支持的 Ruby 版本具有相等的优先级，这意味着第一个安装的版本将自动激活。

**使用 *alternatives* 的一些有用示例**

1. 检查 *alternatives* 的配置内容

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