博客
2024 年 5 月 15 日
2024 年 4 月 RubyGems 更新
欢迎进入 RubyGems 月度更新!作为 Ruby Central 工作的一部分,我们发布上个月所完成工作的回顾。继续阅读以了解 4 月份 RubyGems 及 RubyGems.org 所进行的更新。
RubyGems 新闻
4 月份,我们发布了 RubyGems 3.5.8 及 3.5.9,Bundler 2.5.8 及 2.5.9。这些版本带来了一系列增强功能和 bug 修复,旨在提升使用 RubyGems 时的整体开发者体验,包括:一项遵守 global umask
设置在写入文件时的安全性改进、修复与损坏包文件问题相关的 NoMethodError
崩溃、以及解决解析器中出现的因使用 --strict --patch
过滤器而导致的版本用尽时的错误消息问题 。
本月团队的其它重要成就包括
- 为了增强安全性并防止用户意外公开共享凭证,我们建议您不要将凭证嵌入锁文件。
- 这种做法本就鲜有,除非用户直接在其 Gemfile 中包含凭证,而我们不推荐这种方法。相反,建议使用设置。
- 尽管一些用户选择使用 ENV 变量,我们始终确保凭证未存储在锁文件中,而是从配置或 Gemfile 中直接获取。
使 bundle update specific_gems
更加智能
- 多年来,有报告表明
bundle update gem
并不总是将 gem 更新至最新可用版本。用户发现,如果删除其锁定文件,在 Gemfile 中指定所需版本,或运行bundle install
,则 gem 会按预期进行更新。理想情况下,更新 gem 不应需要这些步骤——应足以使用bundle update gem
。 - 这也是 Dependabot 等依赖项机器人有时无法创建 PR 来解决安全警报的原因。难点在于,升级一个 gem 可能需要升级其他 gem 以避免版本冲突。目前,
bundle update gem
缺乏处理这种复杂性的能力。 - 为了解决这个问题,我实施了一个修复,其中先执行完整的
bundle update
以确定最新可解析版本,接着进行目标更新以强制使用这些版本,从而允许解析器通过解锁冲突的依赖项来管理任何冲突。
针对 RubyGems 和 Bundler 解决 Musl 平台问题
- 自从推出对 musl 平台的支持以来,就出现了不同的问题和倒退,导致 gem 作者对发布 musl 变体犹豫不决。Nokogiri 的维护者一直在积极找出这些问题,包括一个他认为是对完全支持 musl 预编译 gem 的最后一个障碍的关键问题。解决这个问题看似有必要。
Gem::Platform#===
的非传递性在 musl 中导致锁定文件中存在缺失平台,最终引发解决错误。该问题已通过在从锁定文件中移除无效平台时专门适应 musl 的独特特性得到解决。
4 月,RubyGems 获得了 13 位作者提交的 106 项新提交。106 个文件中总计增加 1,175 项,删除 797 项。
RubyGems.org 新闻
本月对 RubyGems.org 做出的更新反映了对改善用户体验、提升安全性和实现平台现代化的坚定承诺。
以下是团队本月的工作重点
- 最初,由于隐私问题,个人资料图片被从 RubyGems.org 中移除,因为 Gravatar 的系统暴露了用户电子邮件,导致了投诉。不过,此更改使得该网站显得匿名,降低了 gem 信息页面公信力的感知。
- 为了解决这个问题,@segiddins 已经开发了一个可以在不损害隐私的情况下安全显示图像的解决方案。这种新方法通过 RubyGems.org 代理图像,既保持了用户隐私,又提升了平台的视觉吸引力和公信力。
- 为了降低由类似 left-pad 这样的软件包移除导致的中断可能性,我们对删除旧 gem 或下载次数较多的 gem 实施了限制。
- 现在,Gem 删除主要用于对新发布但已损坏的 Gem 进行即时修复,其中还原是最佳解决方案。对于其他问题,建议的做法是发布新版本。
- 我们对未经公开审核即可撤销的 Gem 设置了临时限制,以避免过早暴露。此策略涉及下载量超过 100,000 或超过 30 天的 Gem,这与限制删除的其他生态系统更加一致。
- 我们将根据反馈调整策略,并继续通过 RubyGems 员工协调撤销请求,平衡维护员和更广泛社区的需求。
- 从 OpenSearch v1 升级到 v2 使我们能够受益于新的更新、功能和增强功能。
- 此外,引入高可用性可确保即使 AWS 可用区(数据中心)脱机,我们的搜索功能也能保持运作,从而提供强大且有弹性的服务。
4 月中,RubyGems.org 获得 82 个新提交,由 10 位作者贡献。在 150 个文件中,共有 1,111 个新增和 761 个删除。
谢谢
感谢本月为 RubyGems 和 RubyGems.org 做出贡献的所有贡献者!我们非常感谢你们的贡献,并且我们对此表示感谢。
RubyGems 贡献者
- @andyw8 安迪·韦特
- @ccutrer 科迪·库特勒
- @deivid-rodriguez 大卫·罗德里格斯
- @fatkodima 法特科迪马
- @flavorjones 迈克·达莱西奥
- @fryguy 杰森·弗雷
- @gdubicki 格雷格·杜比奇
- @hsbt 涩谷浩志
- @indirect 安德烈·阿科
- @ilyazub ilyazub
- @martinemde 马丁·埃姆德
- @mensfeld 马切伊·门斯菲尔德
- @ngan 阮
- @nobu 中田伸行
- @segiddins 塞缪尔·吉丁斯
- @simi 约瑟夫·西马内克
- @technicalpickles 乔希·尼科尔斯
- @thedavemarshall 戴夫·马歇尔
RubyGems.org 贡献者
- @ahangarha 莫斯塔法·阿汉加哈
- @colby-swandale 科尔比·斯万代尔
- @dancristianb 丹克里斯蒂安
- @deivid-rodriguez 大卫·罗德里格斯
- @hsbt 涩谷浩志
- @indirect 安德烈·阿科
- @javier-menendez 哈维尔·梅嫩德斯·里索
- @markets 马克·安格拉
- @martinemde 马丁·埃姆德
- @segiddins 塞缪尔·吉丁斯
- @simi 约瑟夫·西马内克
如果我们错过了您,请告诉我们,以便我们关注您!
通过访问RubyGems 贡献指南了解更多关于如何为 RubyGems 做贡献的内容。我们欢迎所有类型的贡献,包括修复错误、实现功能、编写和更新文档以及错误分类。