Rails7 正布发布(译)
Rails7 的新理念几年前就开始了。这是我们愿景的实现,真正意义的全栈Web开发框架,完美将前端和后端的技术挑战进行了融合和平衡。其中包括了全方位的开箱即用的点菜单,从餐前开胃菜到餐后甜点都有。
这个理念其实几年前就有,但之前无法启动。主要是我们没有足够的相关技术成熟度。随着浏览器全面支持ES6、ESM,和HTTP/2的适配,还有令人兴奋的 importmap 相关标准,这一切变为了可能。Rails7 发挥了以上所有的优势,打造了一个无Node依赖的前端解决方案,无须过早引入npm包系统或者现代JavaScript流程。
Hotwire
结合了 Turbo
和 Stimulus
,交付了一系列工具帮助打造超级优秀用户体验的产品,关键是与传统单页应用相比,几乎没有新增复杂度。这是新 Rails 应用的默认配置,取代了有更多限制的 Turbolinks
和 Rails UJS
。
虽然大多数 Rails 应用不需要依赖 Node,但我们还是会持续改进与 Node 相关环境的集成工作。
用 Webpacker 紧密绑定 Webpack 的做法已经过去了,我们现在会采用松耦合的一种绑定方式,这估计是开发者更喜欢的方式。无论你是喜欢 esbuild 或者 rollup.js,亦或者是 Webpack,你都可以用我们新打造的 jsbundling-rails 集成方案,并且你可用 --javascript esbuild
来提前进行配置。
同样的,我们针对 CSS 打包采用相同的思路。在 Rails7 中,所有需要的文件都会编译打包在 application.css 中,完美整合。从 Tailwind CSS 到 Bootstrap,从 Dart-powered Sass 到 PostCSS 都有很好的整合。如果你也乐意接受 Node 依赖的复杂度,你仍然可以通 --css bootstrap 这个参数提前配置你的新 Rails 应用。它将使用 cssbundling-rails
来进行打包。(偷偷告诉你,我们针对 Tailwind,做了一个无 Node 依赖的版本)
这里有最好的缺省选择,Rails7 中的前端开发方案如此优秀。缺省的配置下没有 Node,超级简单,却令人惊奇的超强能力,有弹性地扩展。高级配置里面 Node 部分相比从前更加轻量,更少的规范,也更健壮。
但是,当然不止如此,Rails7 更大的梦想是重新定义现在的前端解决方案,目前也很多不错的进展值得庆祝。比如我们全新的 Rails 官网,是由 Basecamp 的设计师 Sean Mitchell 完成。新 Rails 应用也有新的启动画面。我(DHH)还非常专业的录制了新的 demo 演示视频。
下面再介绍一些其他新的相关特性或改进点:
在 ActiveRecord 中提供工作时加密机制
从 HEY 项目中抽象出来的 Active Record 的加密字段支持。这样的话,你的应用除了传统的静态和中转加密外,还可以直接工作时加密。
这是一项立即收益的功能,加密敏感字段添加了额外的安全能力。举个例子,如果攻击者已经获得你的数据库权限,或者你的日志,他们也无法解开这些隐私数据。当然即使不考虑这些入侵者,正常情况也不应用获取到这些敏感的个人信息。
但是更重要的,通过 ActiveRecord 加密技术,你可以从代码层面定义哪些信息是属于敏感信息。这样就可以有效控制这些信息该怎样被访问和构建相关服务。举个例子,审计 Rails 控制台操作,保护敏感信息,或者检查内建系统来自动过滤控制器参数。
通过 MarginaliaStyle Tagging
追踪原始查询
几乎10年前,Marginalia
已经从 Basecamp 抽象出来,通过 SQL 注释标签功能来追踪原始查询了。现在这个 Gem 包已经升级为 QueryLogs 并进入到 ActiveRecord 了。
异步查询加载技术
当你有一个控制器和 action 需要加载两个不相关的查询时,现在你可以通过 Relation#load_async 来进行并发查询了。例如,你有三个复杂的查询,每个要花费 100ms 时间,以前就必须用 300ms 的时间。现在就可以进行并行查询,总共只需要 100ms 即可。
全面使用 Zeitwerk
自动加载技术在 Rails 中是超级酷的魔术技术之一,它表现的如此简单,就像本应该如此一样。原来一直信任并使用的 const_missing
有一些毛病,也缺失一些特性,所以最终我们全面切到了 Zeitwerk
代码加载技术。针对旧的应用,这里有一些少量的升级事项,不过我们的升级向导日志会帮助你不花费什么时间就完成升级。
其他一些值得注意的
Spring
取消了缺省支持,因为更快的电脑往往不需要它,只有大型应用才能用上它。
ActionController::Live#send_stream
让由控制器动态生成的文件推送到客户端变的更加方便。
并行测试现在会比较你的 CPU 核心数,进行弹性的并行测试。
Active Storage
现在会采用更快更安全的 libvips 作为缺省的多版本处理器。
从我们到你们
过去一年,从 Rails6 到 Rails7, 中间有着超过4000次的提交。这是好几百个贡献者的成果,也有很多是第一次提交代码。他们加入了超过 6000 人的贡献者团队,多年来一直在为 Rails 代码作出贡献。
在开发过程中,所有的工作都经过数千个应用的验证,像大型的如 Shopify,Github,Basecamp 和 HEY,都一直跑在最终的生产版本上。
对于 Ruby on Rails 框架来说这是一个了不起的时刻。在这个框架上构建着如此大的应用,并且一直在响应能力和伸缩性上创造着新的记录。在招聘最优秀的 Rails 开发者上,从来没有像今天这么激烈。每周都在有新的贡献者在推进着 Rails 的发展和迭代。
我希望大家喜欢这次新的旅程。
原文:https://rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision
翻译者 WinDy:https://yafeilee.com