Rails Rails 7 正式发布(译文)

lyfi2003 for 深圳至简天成科技有限公司 · 2021年12月16日 · 最后由 SophiaRodriguez 回复于 2024年07月30日 · 17305 次阅读
本帖已被管理员设置为精华贴

Rails7 的新理念几年前就开始了。这是我们愿景的实现,真真正正的全栈 Web 开发框架,完美将前端和后端的技术挑战进行了融合和平衡。其中包括了全方位的开箱即用的点菜单,从餐前开胃菜到餐后甜点都有。

这个理念其实几年前就有,但之前无法启动。主要是我们没有足够的相关技术成熟度。随着浏览器全面支持 ES6、ESM,和 HTTP/2 的适配,还有令人兴奋的 importmap 相关标准,这一切变为了可能。Rails7 发挥了以上所有的优势,打造了一个无 Node 依赖的前端解决方案,无须过早引入 npm 包系统或者现代 JavaScript 流程。

Hotwire 结合了 TurboStimulus,交付了一系列工具帮助打造超级优秀用户体验的产品,关键是与传统单页应用相比,几乎没有新增复杂度。这是新 Rails 应用的默认配置,取代了有更多限制的 TurbolinksRails 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

FinnG 回复

很好的补充:)

Rails really makes everybody happy! From Hello world to IPO!

幸福来的好快,这么快就 release 了

苦海无边回头是岸,南岸无佛。新人推荐 svelte+fastapi

huacnlee 将本帖设为了精华贴。 12月26日 11:45

真好,有人试用了没有

dajianshi 回复

我用上了 ruby 3.1 + rails 7-0-stable

13 楼 已删除

幸福来的好快,这么快就 release 了

15 楼 已删除

针对 Tailwind,做了一个无 Node 依赖的版本?。。。。

19 楼 已删除
qcoke 回复

NestJS,Django 之后,或许可以再看一下 CabloyJS。虽然实际项目不一定能用到,但是有许多解决问题的思路还是可以参考一下

22 楼 已删除
23 楼 已删除

Thanks for providing such a piece of knowledgeable information. Also for more details check in: https://marketresearchcommunity.com/

wooo 看上去很棒,由于公司项目需要我在 Rails5 就转去了 Nodejs. 看文章 Rails7 貌似很棒.. 以前 rails5 年代我们也不喜欢用 Turbolinks,我们全是 rails api + react 独立前端.... 迫不及待开始 rails7...

牛逼 支持

Are you thinking to yourself, “someone write my essay”. Our writers Paperwritingservices know how stressful studying can be and why you would need someone with a write an.

29 楼 已删除

我不否认这很重要,但这总会让我联想起国足明明技战术水平不行 https://ruby-china.org/topics/slope game

需要 登录 后方可回复, 如果你还没有账号请 注册新账号