欢迎来到 Rails 7 的首个 Alpha 版本。它为我们处理 JavaScript 的方式带来了令人兴奋的新方案,为 Active Record 提供了出色的工作加密方法、SQL 查询来源日志记录、异步查询加载、通过 Zeitwerk 进行独占自动加载等等。
我们通常不为 Rails 发布 Alpha 版本,但考虑到新的前端方法是一个如此重大的变化,我们认为在直接进入 Beta -> Release Candidate -> Final 版本之前,最好能进一步验证一下。
请帮助我们测试所有这些新功能,以便我们确保今年能够为 Rails 7 带来一个稳健的最终发布版本!
在将近五年的时间里,我们默认使用 Webpacker 来编写 Rails 中的现代 JavaScript,现在是时候向前看了。浏览器对 ES6/ESM 的支持、HTTP/2 的广泛采用以及令人兴奋的 import maps 新标准,已经为Rails 7 中不依赖 Node 的 JavaScript 方案铺平了道路——并且不放弃 npm 包。
与 Turbolinks 和 Rails UJS 被 Hotwire 的 Stimulus 和 Turbo 组合所取代一样,我们现在拥有有史以来最完整的开箱即用前端设置,用于编写出色的 Rails 应用程序。无需在 node_modules 中有数千个 Node 依赖项,无需与 bundler 配置作斗争,也无需应对 JavaScript 开发中常见的其他挑战。
与此同时,我们还极大地改善了 Rails 与 JavaScript + CSS bundler 之间的集成,以满足有此需求的用户。通过两个可以通过 rails new –javascript [bundler] 和 –css [bundler] 触发的新 companion gems,您可以轻松地开始一个新应用程序,或将一个使用 import maps 开始的应用程序更改为使用 esbuild、rollup.js、Webpack、Tailwind CSS、PostCSS、Dart Sass 和 Bootstrap。
我们从 HEY 中提取了 Active Record 加密属性,因此您的应用程序除了传统的静态加密和传输中加密之外,还可以提供工作时加密。
作为直接的实际好处,加密敏感属性增加了额外的安全层。例如,如果攻击者访问了您的数据库、数据库快照或应用程序日志,他们将无法理解加密的信息。即使不考虑恶意行为者,出于正当理由检查应用程序日志也不应暴露客户的个人信息。
但更重要的是,通过使用 Active Record 加密,您可以在代码层面定义应用程序中什么构成敏感信息。这使得您可以控制这些信息的访问方式并围绕它们构建服务。例如,可以考虑受保护加密数据的可审计 Rails 控制台,或者检查内置系统以自动过滤控制器参数。
查看 关于如何使用加密属性的完整指南。
近十年前,Marginalia 从 Basecamp 中提取出来,通过 SQL 注释标签来追踪查询源。现在,这个外部 gem 已被 合并到 Active Record 中,称为 QueryLogs。
当您的控制器操作需要加载两个不相关的查询时,现在可以通过 Relation#load_async 并发加载。如果您有三个复杂的查询,每个查询耗时 100 毫秒,那么以前您需要花费 300 毫秒逐个执行。现在您可以并行运行它们,总共只花费 100 毫秒。
Rails 中的自动加载是那些令人惊叹的便利功能之一,很容易被视为理所当然。老旧的 `const_missing` 方法,存在一系列的怪癖和缺失的功能,现在已被 Zeitwerk 代码加载器 完全取代。有一些升级的注意事项需要注意,尤其是对于旧应用程序,但有了这个 升级指南,您将很快上手。
libvips 作为其 默认变体处理器。自去年发布 6.1 版本以来,Rails 7 已经合并了超过三千个提交。这是数百名贡献者工作的成果。包括仅今年就有超过 200 名首次贡献者。他们加入了多年来对 Rails 代码库做出过贡献的近六千名贡献者的行列!