博客
2024 年 6 月 17 日
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 视作最后手段。此方法保持了向后兼容性。
- 如果 git 服务器不支持浅层克隆,那么绑定 git 源可能会失败。此问题是 Bundler 以前版本的回归。
- @llenk 在 RailsConf 2024 的黑客日与我们一道致力于修复此问题。我们重点关注的是有关 git 源中断的部分用户的一份 bug 报告。@llenk 开发了一项解决方案,它首先会尝试使用一个高效的浅层克隆,如果失败,那么它将自动尝试使用完整的 git 克隆。
CompactIndexClient
是 Bundler 与 rubygems.org 和其他 gem 源的高效 gem 分辨率接口,它随着时间的推移已自然增长。- 以前我们不得不重构更新器,使其与其他 gem 源兼容,并明确其行为。增加关键代码路径的可读性让新旧贡献者都能更轻松地改进代码,找到错误并提升性能。
- 受 RailsConf 2024 黑客日期间实施的内存改进措施的启发,我们重构了客户端,改进了缓存接口并提取出一个紧凑型索引解析器。
- 在运行
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)
- 一位用户报告,他们在 Crono gem 的 Bundle 安装失败时收到了一条令人困惑的错误消息,导致他们创建了一条 issue。此错误消息错误地暗示 Bundler 出了问题,而实际问题是操作系统不兼容。
- 在与该用户合作定义此问题之后,错误消息得到了澄清,准确反映了操作系统不兼容问题。现在,它还针对 gem 命名提供了明确指导,以帮助用户解决此问题。
5 月,RubyGems 收录了 131 次新提交,由 18 位作者做出贡献。在 142 个文件中,他们进行了 1961 次添加和 864 次删除。
RubyGems.org 新闻
本月针对 RubyGems.org 进行的更新反映了对改善用户体验、增强安全性以及现代化平台的坚定承诺。RubyGems.org 五月获得的托管赞助方是 AWS、Fastly 和 DataDog。以下是团队本月所做的部分重点工作
- 去年年底,我们宣布发布 受信任出版,这一新功能将有助于使 RubyGems.org 更加安全,并且可以更加轻松地自动执行 gem 出版操作。
- RailsConf 2024 黑客日为贡献者提供了参与 RubyGems 项目的机会,并且了解了如何设置受信任出版。在活动期间,@segiddins 成功地为用户设置了受信任发布 API,使流程更易于访问。
- 今年年初,我们开始研究 指标项目,该项目旨在为用户引入 gem 下载的细化跟踪和见解。为了继续进行这项工作,我们已经开始为 RubyGems.org 堆栈添加时序数据库。我们计划使用单独的时序数据库实例来保存分析信息,比如一段时间内的下载情况。
5 月,RubyGems.org 收录了 83 次新提交,由 11 位作者做出贡献。在 135 个文件中,有 1429 次添加和 662 次删除。
感谢
感谢 RubyGems 和 RubyGems.org 的所有贡献者在本月的付出!我们非常感谢你们的贡献,并对你们的支持表示感激。
RubyGems 的贡献者
- @deivid-rodriguez David Rodríguez
- @nobu Nobuyoshi Nakada
- @segiddins Samuel Giddins
- @simi Josef Šimánek
- @jenshenny Jenny Shen
- @kateinoigakukun Yuta Saito
- @hsbt Hiroshi Shibata
- @voxik Vít Ondruch
- @llenk Ellen Keal
- @x-yuri X Yuri
- @martinemde Martin Emde
- @jacklynhma Jacklyn Ma
- @stomar Marcus Stollsteimer
- @dkav Darren Kavanagh
- @MSP-Greg MSP Greg
- @pascalbetz Pascal Betz
- @indirect André Arko
- @k0kubun Takashi Kokubun
- @sachin-sandhu S.Sandhu
- @duckinator 艾伦·玛丽·达什
- @honeyankit 安基特·霍尼
- @JRice 杰瑞米·赖斯
RubyGems.org 的贡献者
- @martinemde Martin Emde
- @segiddins Samuel Giddins
- @simi Josef Šimánek
- @colby-swandale 科尔比·斯旺代尔
- @jacklynhma Jacklyn Ma
- @nateberkopec 内特·伯科佩克
- @javier-menendez 哈维尔·梅嫩德斯·里佐
- @hsbt Hiroshi Shibata
- @indirect André Arko
如果我们疏忽了您,请联系我们,以便我们可以将您纳入我们的鸣谢!
访问 RubyGems 贡献指南 了解有关如何为 RubyGems 做出贡献的更多信息。我们欢迎各种形式的贡献,包括修复漏洞、实施功能、编写和更新文档以及错误分类。