

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

# Bundler 兼容性
<a name="bundler-compatibility"></a>

 本指南包含有关与 Bundler CodeArtifact 的兼容性的信息。

## Bundler 兼容性
<a name="ruby-bundler-support"></a>

AWS CodeArtifact 推荐 Bundler 2.4.11 或更高版本。如果在安装时遇到问题，请将 Bundler CLI 更新到最新版本。

### Bundler 版本支持
<a name="ruby-bundler-version-support"></a>

对于低于 2.4.11 的 Bundler 版本，在 Bundler 决定查询完整索引 `specs.4.8.gz` 之前，Gemfile 中可定义的依赖项上限为 500 个。由于 CodeArtifact 不支持完整索引，因此在使用低于 2.4.11 的 Bundler 版本 CodeArtifact 时，指定超过 500 个依赖项将不起作用。

要使用在 Gemfile 中定义 500 个以上的依赖关系 CodeArtifact，请将 Bundler 更新到 2.4.11 或更高版本。

### Bundler 操作支持
<a name="ruby-bundler-operations-support"></a>

Bundler 使用以下两种协议之一来解析 Ruby gem 依赖关系：压缩索引 API 或依赖项 API。 CodeArtifact 两者都支持。Bundler 2.4.11 及更高版本更喜欢压缩索引 API，如果依赖项 API 不可用，则回退到依赖项 API；早期版本仅使用依赖项 API。 RubyGems 3.5.19 及更高版本在运行时直接使用压缩索引 API。`gem install`

CodeArtifact 支持以下压缩索引端点：
+ `GET /versions`: 返回存储库中的每个 gem 及其完整版本列表。Bundler 并 RubyGems 使用此端点作为依赖关系解析的入口点。
+ `GET /names`: 返回存储库中的每个 gem 名称，按字母顺序排序。
+ `GET /info/{{gem-name}}`: 返回单个 Gem 的版本、依赖关系和必填Ruby-version 信息。

`/versions`和`/names`端点支持最多包含 5,000 颗宝石的存储库。针对包含 5,000 个以上宝石的存储库发出的请求会返回 HTTP 400 错误。

CodeArtifact 还支持 Bundler 依赖关系 API，网址为`/api/v1/dependencies`。单个请求可以包含多个 Gem 名称；有关如何根据账户的*每秒读取请求配额对多 Gem 请求*进行权重的详细信息，请参阅[中的配额 AWS CodeArtifact](service-limits.md)。

因为`/versions`并`/names`返回存储库中每个 gem 的数据， CodeArtifact 还会根据返回的 gem 数量对这些请求进行加权。 CI/CD即使 HTTP 请求速率显得很低，也可以限制并行运行的环境`bundle install`或`gem install`操作。如果您在 Ruby Gem 解析期间遇到限制，请申请增加*单个 AWS 账户每秒读取请求的*配额。

如果您之前固定 RubyGems 到低于 3.5.19 的版本作为 CodeArtifact 兼容性解决方法，则现在可以移除该 pin 并升级到最新版本。

CodeArtifact 不支持旧版 RubyGems 规范索引，包括`specs.4.8.gz``latest_specs.4.8.gz`、和`prerelease_specs.4.8.gz`。它们已被 Compact Index API 所取代。

#### 正在测试压缩索引支持
<a name="ruby-compact-index-testing"></a>

要验证压缩索引解析是否适用于您的 CodeArtifact 存储库，请执行以下操作：

1. 如果您之前固定 RubyGems 到低于 3.5.19 的版本，请移除该引脚：

   ```
   gem update --system
   ```

1. 验证您的 RubyGems 和捆绑器版本：

   ```
   gem --version    # Should be 3.5.19 or higher
   bundle --version # Should be 2.4.11 or higher
   ```

1. `gem install`针对您的 CodeArtifact 存储库进行测试：

   ```
   gem install <gem-name> --source https://<domain>-<account-id>.d.codeartifact.<region>.amazonaws.com/ruby/<repo>/
   ```

1. `bundle install`使用详细输出进行测试以确认正在使用压缩索引：

   ```
   bundle install --verbose 2>&1 | grep -i "compact\|/versions\|/info"
   ```

   您应该看到对`/versions`和的请求，`/info/<gem-name>`而不是`/api/v1/dependencies`。