2021 年 12 月 6 日,星期一

Rails 7.0 RC1:新的 JavaScript 解决方案、在工作状态的加密、查询来源日志记录、仅限 Zeitwerk

由 dhh 发布

我们差不多准备好宣布 Rails 7 完成了!自 第一个 alpha 版本发布以来,收到的反馈非常棒,我们已经修复了大量问题,并且看到 Basecamp、HEY、GitHub 和 Shopify 都在生产环境中使用这个 alpha 系列。因此,我们现在非常有信心它已接近就绪,我们直接从 alpha 跳到了 release candidate。这是 RC1。

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

前端的所有新答案

在将近五年的时间里,我们一直以 Webpacker 作为在 Rails 中编写现代 JavaScript 的默认方案,但现在 是时候向前发展了。浏览器对 ES6/ESM 支持的进步、HTTP/2 的广泛采用以及 import maps 的令人兴奋的新标准,已经为 Rails 7 中的无 Node.js JavaScript 方法 铺平了道路——而无需放弃 npm 包

结合 Turbolinks 和 Rails UJS 被 HotwireStimulusTurbo 组合所取代,我们现在拥有了有史以来最完整的开箱即用的前端设置,用于编写出色的 Rails 应用程序。无需在 node_modules 中拥有数千个 Node.js 依赖项,与 bundler 配置斗争,或处理 JavaScript 开发中的任何其他常见挑战。

同时,我们也极大地改进了 Rails 和 JavaScript + CSS bundlers 之间的集成,以满足有此需求的用户。通过两个新的配套 gem,可以通过 rails new –javascript [bundler]–css [bundler] 来触发,您可以轻松地启动新应用程序或将从 import maps 开始的应用程序更改为使用 esbuildrollup.jsWebpackTailwind CSSPostCSSDart SassBootstrap

Active Record 的工作时加密

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

作为直接的实际好处,加密敏感属性增加了额外的安全层。例如,如果攻击者访问了您的数据库、数据库快照或应用程序日志,他们将无法理解加密的信息。即使不考虑恶意行为者,出于正当理由检查应用程序日志也不应暴露客户的个人信息。

但更重要的是,通过使用 Active Record 加密,您可以在代码层面定义应用程序中什么构成敏感信息。这使得您可以控制这些信息的访问方式并围绕它们构建服务。例如,可以考虑受保护加密数据的可审计 Rails 控制台,或者检查内置系统以自动过滤控制器参数。

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

使用 Marginalia 风格的标签追踪查询源

近十年前,Marginalia 从 Basecamp 中提取出来,通过 SQL 注释标签来追踪查询源。现在,这个外部 gem 已被 合并到 Active Record 中,称为 QueryLogs

异步查询加载

当您的控制器操作需要加载两个不相关的查询时,现在可以通过 Relation#load_async 并发加载。如果您有三个复杂的查询,每个查询耗时 100 毫秒,那么以前您需要花费 300 毫秒逐个执行。现在您可以并行运行它们,总共只花费 100 毫秒。

仅使用 Zeitwerk

Rails 中的自动加载是那些令人惊叹的便利功能之一,很容易被视为理所当然。老旧的 `const_missing` 方法,存在一系列的怪癖和缺失的功能,现在已被 Zeitwerk 代码加载器 完全取代。有一些升级的注意事项需要注意,尤其是对于旧应用程序,但有了这个 升级指南,您将很快上手。

其他一些亮点

我们所有人致以大家最好的祝福

自三个月前发布 alpha 版本以来,此 release candidate 已包含超过七百次提交。我们希望在今年圣诞节前将这项工作交到大家手中 🎄🎁❤️。