2021 年 9 月 15 日,星期三

Rails 7.0 Alpha 1:新的 JavaScript 解决方案、工作时加密、查询来源记录、Zeitwerk 独占

作者:dhh

欢迎使用 Rails 7 的第一个 alpha 版本。它为我们如何使用 JavaScript 提供了一些非常激动人心的新答案,一个与 Active Record 一起使用的工作时加密的强大方法,SQL 查询来源记录、异步查询加载、通过 Zeitwerk 独占的自动加载等等。

我们通常不会为 Rails 发布 alpha 版本,但考虑到新的前端方法是一个如此重大的变化,我们认为在直接进入 beta -> 发布候选 -> 最终版本之前,最好进一步验证一下。

请帮助我们测试所有这些新功能,以便我们能够确保今年发布一个稳定的最终版本 Rails 7!

前端的所有新答案

在使用 Webpacker 作为我们在 Rails 中编写现代 JavaScript 的默认答案近五年后,是时候继续前进了。浏览器对 ES6/ESM 的支持进步,HTTP/2 的广泛采用以及 激动人心的新导入地图标准铺平了道路,使 Rails 7 中的 JavaScript 采用无 Node 的方法无需放弃 npm 包.

Hotwire 组合的 StimulusTurbo 取代 Turbolinks 和 Rails UJS 一样,我们现在拥有最完整的开箱即用的前端设置,可以用于编写出色的 Rails 应用程序。无需在 node_modules 中拥有数千个节点依赖项,无需与 bundler 配置作斗争,也无需处理 JavaScript 开发中常见的任何其他挑战。

与此同时,我们还 极大地改进了 Rails 与 JavaScript + CSS 捆绑器之间的集成,这些捆绑器适用于那些需要它们的人。通过两个新的配套 gem,可以通过 rails new –javascript [bundler]–css [bundler] 触发,您可以轻松访问开始一个新应用程序或更改一个使用导入地图开始的应用程序,以使用 esbuildrollup.jsWebpackTailwind CSSPostCSSDart SassBootstrap.

Active Record 的工作时加密

HEY 中提取,我们在 Active Record 中添加了加密属性,因此您的应用程序除了传统的静止状态和传输过程中的加密之外,还可以提供工作时加密。

作为一项直接的实际益处,对敏感属性进行加密可以添加额外的安全层。例如,如果攻击者获得了对您的数据库、数据库快照或应用程序日志的访问权限,他们将无法理解加密信息。即使不用考虑恶意行为者,出于合法原因检查应用程序日志也不应该泄露客户的个人信息。

但更重要的是,通过使用 Active Record Encryption,您可以在代码级别定义构成应用程序中敏感信息的因素。这使得能够控制如何访问此信息,并在其周围构建服务。例如,可以考虑保护加密数据的可审计 Rails 控制台,或检查内置系统以自动过滤控制器参数。

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

使用 Marginalia 风格的标记跟踪查询来源

大约十年前,Marginalia 从 Basecamp 中提取出来,用于使用 SQL 注释标记跟踪查询来源。现在,这个外部 gem 已 上游到 Active Record 中,成为 QueryLogs.

异步查询加载

当您的控制器操作需要加载两个无关的查询时,您现在可以通过 Relation#load_async 并发执行此操作。如果您有三个复杂的查询,每个查询都需要 100 毫秒才能执行,您之前必须依次执行它们,花费 300 毫秒。现在您可以并行运行它们,总共只需要花费 100 毫秒即可完成。

Zeitwerk 独占

Rails 中的自动加载是那些神奇的生活质量现实之一,很容易被人们认为是理所当然的。与一系列怪癖和缺少的功能一起出现的可靠的旧 const_missing 方法终于被 Zeitwerk 代码加载器 独占地取代了。有一些升级需要注意,特别是对于较旧的应用程序,但有了这个 升级指南,您应该很快就能上手。

其他几个亮点

  • Spring 不再默认启用,因为更快的计算机已使其在除最大应用程序以外的所有应用程序上变得不再那么相关。
  • ActionController::Live#send_stream 使得在控制器操作中轻松地流式传输正在动态生成的的文件成为可能。
  • 并行测试现在将比较您的 CPU 核心数与您的测试次数,并 相应地调整并行化.
  • Active Storage 现在使用更快、更安全的 libvips 作为其 默认变体处理器.

我们全体成员向您全体成员致敬

自去年我们发布版本 6.1 以来,Rails 7 中已 进行了超过三千次提交。这是数百位贡献者的工作。包括 今年仅有 200 多位首次贡献者。他们加入了 近六千位贡献者,这些贡献者多年来一直在 Rails 代码库中做出更改!