2021 年 12 月 15 日,星期三

Rails 7.0:履行愿景

由 dhh 发布

这个版本的 Rails 在概念上酝酿了数年。它是实现一个真正的全栈式方法以应对 Web 开发的愿景的实现,它将以同等的精力来解决前端和后端挑战。Omakase 菜单包含从开胃菜到甜点的全套菜品。

在几年前,这个愿景是无法实现的。我们根本没有核心技术。但随着浏览器对 ES6/ESM 支持的进步、HTTP/2 的广泛采用和导入映射的新激动人心标准,最终成为可能。Rails 7 充分利用了所有这些优势,提供无需 Node 的默认前端方法 - 同时在过程中不牺牲对npm 包或现代 JavaScript 的访问。

HotwireTurboStimulus的组合提供了所有必要工具来产生极好的用户体验,与单页应用程序相比几乎无一不及——而且复杂性只是其中的一小部分。它是新 Rails 应用程序的默认选择,取代了 Turbolinks 和 Rails UJS 更受限的选项。

虽然大多数 Rails 应用程序不会因为这些默认设置而需要依赖 Node,但我们仍然设法在 Rails 7 中显著改善了集成情况。

Webpacker 紧密结合了 Webpack,而现在是松散结合任何您可能更喜欢的 JavaScript 捆绑器。无论您喜欢esbuild(如今谁不喜欢!)还是rollup.js甚至Webpack,您都能够通过全新的jsbundling-rails集成来使用它们,可以为新应用程序通过--javascript esbuild进行预先配置。

采用同样的方法处理依赖于 Node 的 CSS 捆绑器。使用 Rails 7,他们只需要能够生成一个已编译的 application.css 文件,并且它们将完美集成。从Tailwind CSSBootstrap,从Dart 支持的 SassPostCSS。如果您愿意接受 Node 依赖的复杂程度,您可以使用--css bootstrap预先配置您的新 Rails 应用程序以使用它们中的任何一个,并且它将使用cssbundling-rails。(并且专门针对 Tailwind,我们甚至有一个版本也可以在没有 Node 依赖的情况下工作!)

这些是我们为 Rails 前端开发做出的最佳默认选择。没有 Node 的默认路径明显更简单,出人意料地强大,并滑行到未来前端开发可能去的任何地方。与 Node 集成的备选路径比以往任何时候都更轻量、更宽松、更不可变。

但当然,这还不是全部!虽然 Rails 7 的大想法是前端答案的改革,但还有很多额外的进展值得庆祝。就像我们的 全新网站!与 Basecamp 设计师 Sean Mitchell 共同创建。新的外观也已应用于新应用的引导屏幕。我还录制了一段新的演示视频来正确展示框架。

以下是一些其他众多新特性和改进

使用 Active Record 进行工作中加密

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

作为一个立竿见影的实际好处,加密敏感属性增加了额外的安全层。例如,如果攻击者获得了您的数据库、数据库快照或应用程序日志的访问权限,他们将无法理解加密信息。即使没有考虑恶意行为者,出于合法原因检查应用程序日志也不应公开客户的个人信息。

但更重要的是,通过使用 Active Record 加密,您在代码级别定义什么是应用程序中的敏感信息。这使您可以控制如何访问此信息并围绕它构建服务。作为示例,考虑保护加密数据的可审计 Rails 控制台或检查内置系统以自动筛选控制器参数。

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

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

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

异步查询加载

当您有一个控制器操作需要加载两个不相关的查询时,您现在可以通过 Relation#load_async 并发地执行此操作。如果您有三个复杂的查询,每个查询都需要 100ms,则以前您必须花费 300ms 一个接一个地执行它们。现在,您可以并行运行它们,只在这组操作上花费总共 100ms。

独家使用 Zeitwerk

Rails 中的自动加载是一种神奇的生活质量现实,人们很容易将其视为理所当然。终于,带有各种怪癖和缺失功能的可信老旧 const_missing 方法已完全替换为 Zeitwerk 代码加载器。有几个升级陷阱需要注意,特别是对于较旧的应用程序,但通过此 升级指南,可以在很短的时间内完成升级

其他一些亮点

我们献给你们所有人

自去年发布 6.1 版以来,已录入 Rails 7 中的 超过四千个提交。这是数百位贡献者的工作,其中许多人是首次提交者。他们加入到 超过六千位贡献者 的行列中,这些贡献者多年来对 Rails 代码库做出了更改!

所有这些工作都通过开发阶段接受了数千个应用程序的彻底审查,而像 ShopifyGitHubBasecampHEY 这样的重磅级应用程序目前都在生产中运行此最终版本或接近此版本的版本!

这是参与 Ruby on Rails 的非凡时刻。在此框架上构建的最大应用程序都 不断创下访问量和规模的新纪录。对最优秀的 Rails 开发者的招聘竞争比以往任何时候都更加激烈。新贡献者的涌入继续推动框架向前发展 每周如此

希望您享受这次旅程!