page contents

Rails Rails 7 正式发布

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

attachments-2022-07-DMOSdIGo62c24831eb57c.pngRails7 的新理念几年前就开始了。这是我们愿景的实现,真真正正的全栈 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 的发展和迭代。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2022-07-04 09:54
  • 阅读 ( 732 )
  • 分类:行业资讯

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章