web开发|Rails 7.0 发布,实现愿景:真正的全栈 Web 开发方法

web开发|Rails 7.0 发布,实现愿景:真正的全栈 Web 开发方法

出品|开源中国
作者|罗奇奇
Rails 是一个 Web 应用程序框架 , 是 Ruby 最早也是最出名的一个框架 , 其中包括根据模型-视图-控制器(MVC) 模式 , 创建 Web 应用程序所需的所有内容  。 Rails 可以说是 MVC 开发的先驱者 , 了解 MVC 模式是了解 Rails 的关键 。
Rails 7.0 是一个大版本 , 实现了一个愿景:一种真正的全栈 Web 开发方法 , 以可以同时应对前端和后端的挑战 。 比如 Rails 应用有新的默认选择: Hotwire , 它的 Turbo 和 Stimulus 组合几乎包含所有增强用户体验的工具;又或者无需将 Webpack 与 Webpacker 紧密耦合 , Rails 7.0 可以使用新的jsbundle -rails集成将任何 JavaScript 打包器松散结合 , 无论是 esbuild、rollup.js 或是Webpack 。
此版本还有相当多更新项 , 下面摘录一些较为重要的更新内容作介绍:
活动记录(Active Record)支持工作中加密Rails 7.0 向 Active Record 添加了活动记录加密属性(encrypted attributes to Active Record) , 除了传统的静态和传输中覆盖之外 , 应用程序还可以提供工作中加密(at-work encryption) 。
加密敏感属性会增加一个额外的安全层 , 就算恶意攻击者获取了数据库、快照或者日志的访问权限 , 也看不懂加密信息 , 另外 , 通过使用 Active Record Encryption , 可以在代码级别中定义应用敏感信息的构成 。
点此查看关于使用加密属性的完整指南 。
使用 Marginalia 样式标记跟踪查询来源【web开发|Rails 7.0 发布,实现愿景:真正的全栈 Web 开发方法】大概十年前(2012) , Rails 引入基于 Basecamp 的 Marginalia:使用 SQL 注释标记来跟踪查询来源 。 现在这个外部 gem 已经作为 QueryLogs 上传到 Active Record 中 。
异步查询加载如果有一个控制器操作需要加载两个不相关的查询时 , Rails 7.0 可以通过Relation#load_async并发执行 。
比如:以前如果有三个复杂的查询 , 每个查询需要 100 毫秒 , 那么就必须先花费 300 毫秒来逐一执行它们 。 现在可以并行运行 , 总共只花费 100 毫秒 。
ZeitwerkRails 的自动加载是它的特性之一 , 不过老的 const_missing 方法有一系列问题 , 因此引入新的Zeitwerk 代码加载器完全取代它 。 比较老的应用升级会比较麻烦 , 可查看完整的升级指南 。
其他一些亮点

  • 默认情况下 , Spring不再启用 。
  • ActionController::Live#send_stream可以轻松地传输动作控制器实时生成的流文件 。
  • 现在并行测试将比较 CPU 内核计数和测试计数 , 并相应地调整并行度 。
  • Active Storage 现在使用更快、更安全的libvips作为默认变体处理器 。
更多详尽内容可以在更新公告中查看 。