RubyGems 导航菜单

博客

返回博客文章

2024 年 5 月 RubyGems 更新

欢迎来到 RubyGems 月度更新!作为 Ruby Central 工作的一部分,我们发布上个月所做工作的概括。继续阅读以了解 5 月对 RubyGems 和 RubyGems.org 做出的更新。

RubyGems 新闻

5 月,我们发布了 RubyGems 3.5.10 和 3.5.11 ,以及 Bundler 2.5.10 和 2.5.11。这些版本提供了一系列增强功能和错误修复,旨在改善 RubyGems 的整体开发人员体验,包括:限制软件包元数据和大文件大小的安全更新,一项修复,用于解决 插件存根有时不会被 gem uninstall 正确删除 的问题,不再使用 Bundler 常量bundle add @technicalpickles中添加 --glob 标志。最后,Gusto 的软件工程师 Ngan Pham 撰写了 这篇客座博客文章,介绍了 auto_install @technicalpickles 实现的激动人心的改进内容,也包含在此 Bundler 版本中。

本月团队的一些其他重要成果包括

改进对具有本地软件包缓存的应用程序的处理

  • 最近,我们修复了一些具有本地软件包缓存的软件包的问题。不幸的是,这些修复既产生了功能回归,也产生了这种操作模式的性能回归。我们致力于修复这些问题,同时还改进了 Bundler 的内部代码组织。
  • 我们使 Bundler 考虑的软件包类型(本地安装、缓存或远程)的处理更显式,并将其移出了 Bundler::Definition,这是一个具有太多职责的类。这使我们能够简化代码并修复有关功能和性能的报告问题,从而为用户和开发人员改善 RubyGems 体验。

使默认软件包像常规软件包一样运行

  • 即使 Ruby 更新较小,处理默认 gem 仍然具有挑战性。当 Ruby 版本切换时,这会影响 Bundler,导致 gem 缺失。
  • 默认 gem 还要特殊内部处理。理想情况下,我们将默认 gem 视作常规 gem,允许其在 Bundler 的配置路径中缓存并完全安装。尽管我们在 Bundler 2.5 中尝试此项更改,但由于有报告的问题,我们在发布之前又还原了此项更改。
  • 这次,我们尝试从过去的经验中汲取教训并重新启用此功能,确保在无法找到其常规副本时,将默认 gem 视作最后手段。此方法保持了向后兼容性。

修复 Bundler git 源中的浅层克隆错误

  • 如果 git 服务器不支持浅层克隆,那么绑定 git 源可能会失败。此问题是 Bundler 以前版本的回归。
  • @llenk 在 RailsConf 2024 的黑客日与我们一道致力于修复此问题。我们重点关注的是有关 git 源中断的部分用户的一份 bug 报告。@llenk 开发了一项解决方案,它首先会尝试使用一个高效的浅层克隆,如果失败,那么它将自动尝试使用完整的 git 克隆。

重构紧凑型索引客户端

  • CompactIndexClient 是 Bundler 与 rubygems.org 和其他 gem 源的高效 gem 分辨率接口,它随着时间的推移已自然增长。
  • 以前我们不得不重构更新器,使其与其他 gem 源兼容,并明确其行为。增加关键代码路径的可读性让新旧贡献者都能更轻松地改进代码,找到错误并提升性能。
  • 受 RailsConf 2024 黑客日期间实施的内存改进措施的启发,我们重构了客户端,改进了缓存接口并提取出一个紧凑型索引解析器。

改进 bundle update 的内存占用

  • 在运行 bundle update 并解析紧凑型索引版本文件时,一个低效率问题每次都会导致 70MB 的不必要内存使用。
  • 此问题在 RailsConf 2024 的一场会议期间进行了讨论,促使 @jacklynhma 在会议的黑客日与我们一道并帮助处理这一问题。我们很快找出一种更改,可以减少解析紧凑型索引版本的内存占用:更新缓存校验和。@jacklynhma 成功实施了此项改进。
==> after <==
Total allocated: 689.06 MB (9638226 objects)
Total retained:  237.01 MB (2979180 objects)
==> before <==
Total allocated: 755.64 MB (10379242 objects)
Total retained:  236.94 MB (2977745 objects)

修复一条与 Bundler 错误消息有关的 bug

  • 一位用户报告,他们在 Crono gem 的 Bundle 安装失败时收到了一条令人困惑的错误消息,导致他们创建了一条 issue。此错误消息错误地暗示 Bundler 出了问题,而实际问题是操作系统不兼容。
  • 在与该用户合作定义此问题之后,错误消息得到了澄清,准确反映了操作系统不兼容问题。现在,它还针对 gem 命名提供了明确指导,以帮助用户解决此问题。

5 月,RubyGems 收录了 131 次新提交,由 18 位作者做出贡献。在 142 个文件中,他们进行了 1961 次添加和 864 次删除。

RubyGems.org 新闻

本月针对 RubyGems.org 进行的更新反映了对改善用户体验、增强安全性以及现代化平台的坚定承诺。RubyGems.org 五月获得的托管赞助方是 AWSFastlyDataDog。以下是团队本月所做的部分重点工作

在 RailsConf 2024 中为受信任出版设置用户

  • 去年年底,我们宣布发布 受信任出版,这一新功能将有助于使 RubyGems.org 更加安全,并且可以更加轻松地自动执行 gem 出版操作。
  • RailsConf 2024 黑客日为贡献者提供了参与 RubyGems 项目的机会,并且了解了如何设置受信任出版。在活动期间,@segiddins 成功地为用户设置了受信任发布 API,使流程更易于访问。

向 RubyGems.org 基础设施添加一个时序数据库

  • 今年年初,我们开始研究 指标项目,该项目旨在为用户引入 gem 下载的细化跟踪和见解。为了继续进行这项工作,我们已经开始为 RubyGems.org 堆栈添加时序数据库。我们计划使用单独的时序数据库实例来保存分析信息,比如一段时间内的下载情况。

5 月,RubyGems.org 收录了 83 次新提交,由 11 位作者做出贡献。在 135 个文件中,有 1429 次添加和 662 次删除。

感谢

感谢 RubyGems 和 RubyGems.org 的所有贡献者在本月的付出!我们非常感谢你们的贡献,并对你们的支持表示感激。

RubyGems 的贡献者

RubyGems.org 的贡献者

如果我们疏忽了您,请联系我们,以便我们可以将您纳入我们的鸣谢!


访问 RubyGems 贡献指南 了解有关如何为 RubyGems 做出贡献的更多信息。我们欢迎各种形式的贡献,包括修复漏洞、实施功能、编写和更新文档以及错误分类。

Gift Egwuenu