博客
2023 年 2 月 22 日
RubyGems.org 依赖关系 API 已弃用
由 Samuel Giddins 撰写
最新信息:Dependency API 已于 5 月 24 日禁用,延期两周后 终于关闭
更新:相反,Dependency API 将在 5 月 10 日禁用,比此处提到的晚一个月。如果您在使用依赖关系 API 的 Nexus、Artifactory、Chef 或其他产品时遇到问题,请阅读 关于推迟弃用的博文
我们已在 RubyGems.org 上弃用 依赖关系 API。如需了解更多信息,请继续阅读,或查看有关此弃用操作的原始 RFC。
什么是依赖关系 API?
依赖关系 API 是 Bundler 从 Bundler 1.1 起获取 Gemfile 解析依赖项信息的主要方式,直到 Bundler 1.12 于 2016 年 4 月发布,推出了 “新型”精简索引 API。
该 API 只有一个端点,即 /api/v1/dependencies
(以 Marshal 或 JSON 形式返回响应),它接受一个用逗号分隔的单个 gems
查询参数。
例如,https://index.rubygems.org/api/v1/dependencies.json?gems=rails 会返回宝石 rails
的每个版本的每个依赖项。
为什么依赖关系 API 已弃用?
依赖关系 API 消耗的资源极大:即使在今天,它也占 RubyGems.org Rails 应用程序产生流量的 20-25% 之多,并且无法由 Fastly 缓存。每个唯一的宝石列表都需要 RubyGems.org 运行复杂的数据库查询,而大多数请求都包含一个唯一的宝石列表。
与依赖关系 API 相比,精简索引 API 被设计为可缓存的。由于精简索引已经推出近七年,并且 Bundler 和 RubyGems 都支持在依赖关系 API 不可用的情况下回退到较慢的“完整”索引,因此我们计划在未来几个月内从 RubyGems.org 中弃用并删除依赖关系 API。
此弃用操作会产生什么影响?
我们希望这次弃用不会对用户产生影响。
如果您使用 7 年以上的 Bundler 版本(1.11 或更旧版本)从 RubyGems.org 安装 gem,那么您的安装速度将变慢。希望大家在过去 7 年内至少升级过一次 Bundler,以便继续以最高速度进行安装。
如果您从其他 gem 源(如 Gemstash、Geminabox、Nexus、Artifactory 或 GitHub Packages)中安装 gem,不会有任何变化。Bundler 将继续首先尝试精简索引 API,然后回退到依赖项 API,再回退到完整索引。
如果您在不通过 Bundler 或 Rubygems 直接使用依赖项 API,我们建议您切换到精简索引 API 或 Gem 版本 API,以更轻松地提供所需信息。
给我详细信息
好的!
我们将逐步停止使用依赖项 API,以高度谨慎地执行弃用。在接下来的一个半月中,将出现多个“降载”期,在此期间 RubyGems.org 将从依赖项 API 返回 404。
- 协调世界时 3 月 22 日 00:00(太平洋时间下午 4 点 / 东部时间晚上 7 点),持续 5 分钟
- 协调世界时 3 月 29 日的每个整点,持续 10 分钟
- 协调世界时 4 月 3 日全天
- 4 月 10 日协调世界时 00:00 起
最后,我要衷心感谢多年来帮助维持依赖项 API 正常运行的所有人,特别是 @qrush 最初创建了 API、@hone 将 API 重写成可扩展服务、以及 @sonalkr132 将该服务合并回主 Rails 应用程序,还有多年来所有其他 Bundler 和 RubyGems.org 志愿者。