2021 年 12 月 6 日星期一

Rails 7.0 RC1:新的 JavaScript 答案、工作中加密、查询原始日志记录、专门使用 Zeitwerk

发布者 dhh

我们已经做好准备宣布 Rails 7 完工了!自alpha 首发版本以来收到的反馈非常好,我们已经消除了大量问题,并且我们看到 Basecamp、HEY、GitHub 和 Shopify 都在对这一系列 alpha 进行生产运行。因此,我们现在对这个版本接近完工很有信心,以至于我们从 alpha 版本直接跳过此次发布候选版。此版本是 RC1。

请帮助我们对所有这些新内容进行最终测试,以便确保今年能稳定发布 Rails 7 的最终版本!

前端上所有新的答案

经过五年使用Webpacker作为 Rails 中编写现代 JavaScript 的默认答案,现在是时候继续前进了。浏览器对 ES6/ESM 的支持取得了进展,HTTP/2 被广泛采用,import map 的新标准令人兴奋,这些为 Rails 7 中的 JavaScript 无 Node 方法不会放弃 npm 包)铺平了道路。

随着 Turbolinks 和 Rails UJS 被HotwireStimulusTurbo结合取代,我们现在拥有有史以来最完整的开箱即用的前端设置,用于编写优秀的 Rails 应用程序。无需在node_modules中包含数千个 node 依赖项,无需与 bundler 配置作斗争,也无需任何其他 JavaScript 开发中常见的挑战。

与此同时,我们还大幅改善了 Rails 与 JavaScript + CSS 捆绑器之间的集成,以满足那些需要集成的人士的需求。通过两个新的配套 gem,可以通过 rails new –javascript [bundler]–css [bundler]来触发,你可以轻松开始一个新应用程序或更改从 import map 开始使用esbuildrollup.jsWebpackTailwind CSSPostCSSDart SassBootstrap的新应用程序。

使用 ActiveRecord 的工作中加密

我们从HEY中提取了加密属性到 ActiveRecord,因此你的应用程序除了传统的静态覆盖和传输覆盖之外还可以提供工作中加密。

作为一项立竿见影的实用优点,加密敏感属性能添加额外的安全层。例如,如果攻击者获得了您数据库、数据库快照或应用程序日志的访问权限,他们将无法理解这些加密信息。即使不考虑恶意的行为者,出于正当理由检查应用程序日志也不应该披露客户的个人信息。

但更重要的是,通过使用 ActiveRecord 加密,您可以在代码级别定义应用程序中构成敏感信息的元素。这能够控制如何访问这些信息并在这些信息周围构建服务。举个例子,想想保护了加密数据的可审计的 Rails 控制台或检查了用于自动过滤控制器参数的内置系统。

查看有关如何使用加密属性的完整指南

使用 Marginalia 风格标记追踪查询起源

大约十年前,Marginalia 从 Basecamp 中提取出来以利用 SQL 注释标记追踪查询起源。现在此外部 gem 已被上游合并到了 ActiveRecord 中,作为 QueryLogs

异步查询加载

当您有需要加载两个不相关的查询的控制器操作时,您现在可以通过Relation#load_async并行完成。如果您有三个每个需要 100 毫秒的复杂查询,以前您必须一个接一个地执行它们,花费 300 毫秒。现在您可以并行运行它们,对该集合仅用 100 毫秒。

仅 Zeitwerk

Rails 中的自动加载是一种生活质量的魔法,很容易将其视为理所当然。附带一系列怪癖和缺失功能的可靠旧const_missing方法最终已被Zeitwerk 代码加载器所独家取代。需要注意一些升级陷阱,尤其是对于较旧的应用程序,但有了此升级指南,您很快就能找到自己的方法

一些其他亮点

从我们所有人到你们所有人

这个候选版本已经发布大约七百个提交,自我们三個月前发布 alpha 版以来。我们希望在今年圣诞节前把这项工作交给所有人🎄🎁❤️。