2020 年 11 月 2 日星期一

Rails 6.1 RC1:横向分片、多数据库改进、严格加载、后台销毁关联、错误对象等等!

eileencodes

Rails 6.1 的第一个发布候选版本已经发布,它真是太棒了!在过去的几个月里,我们一直在努力实现多数据库的改进,添加了在作业中而不是在内存中销毁关联的支持,将错误转化为对象,以及更多其他功能。

多年来 Rails 的发展令人惊叹,虽然我们对入门流程进行了一些改进,但是 Rails 从未如此出色。此版本中的功能重点在于添加你需要用的功能,以保证你的应用程序在未来几年里能够正常运行。

我们来看一下一些新功能

多数据库改进

按数据库进行连接切换

Rails 6.1 为你提供了按数据库进行连接切换的能力。在 6.0 中,如果你切换到reading 角色,那么所有数据库连接也都将切换到 reading 角色。现在在 6.1 中,如果你在配置中将legacy_connection_handling 设置为false,那么 Rails 将允许你通过在相应的抽象类中调用connected_to来切换单个数据库的连接。

横向分片

Rails 6.0 提供了对你的数据库进行功能分区(多个分区,不同架构)的能力,但是无法支持横向分片(同一个架构,多个分区)。Rails 无法支持横向分片,因为 Active Record 中的模型每个角色每个类只能有一个连接。此问题现已解决,可以使用 Rails 对横向分片进行操作。

其他改进

除了添加横向分片支持外,我们还添加了许多新功能并改进了许多多数据库的内部机制。Kyle Thompson 已添加对数据库命名空间任务的支持,例如db:schema:dump:namespacedb:schema:load:namespacedb:structure:dump:namespacedb:structure:load:namespaceShopify 的 Jean Boussier 改善了连接池管理

严格加载关联

除了许多数据库和连接管理方面的改进之外,Aaron PattersonEileen M. Uchitelle 添加了对严格加载关联的支持。有了此功能,您就可以确保您的所有关联都被急切加载,在 N+1 发生之前停止它们。Kevin Deisz关联声明添加了额外的支持,而 bogdanvlviv 添加了对默认启用严格加载的支持。

委派类型

Rails 6.1 将“委派类型”作为单表继承的替代方案。这有助于表示类层次结构,允许超类成为由其自己表表示的具体类。每个子类都有自己的表,用于存储附加属性。查看请求请求,作者 DHH

异步销毁关联

异步销毁关联添加了应用程序在后台作业中销毁关联的功能。当销毁数据时,这有助于您避免应用程序中的超时和其他性能问题。实现是由团队共同努力实现的——此“公共关系”由 Basecamp 的 George Claghorn 发起,GitHub 的 Cory Gwin 进一步提供了支持,Shopify 的 Rafael FrançaAdrianna Chang 完成最后的工作。

错误对象

Active Model 的错误现在是带有接口的对象,允许您的应用程序更轻松地处理和交互由模型引发的错误。此功能lulalala 实现,包括查询界面,支持更精确的测试,并且可以访问错误细节。

Active Storage 改进

在 Rails 6.1 中,Active Storage 得到了一次非常好的更新!您现在可以配置您要存储在其中的服务的附件。此功能Dmitry Tsepelev 实现。

此外,Rails 6.1 为 Active Storage 添加了Blob 永久 URL的支持。由 Shopify 的 Peter Zhu 实现的此功能允许您配置附件以使用私有或公有 URL,并确保公有 URL 将始终使用永久 URL。

不允许弃用支持

如果您想运行不包含弃用警告的应用程序,那么此功能非常适合您。此特性允许应用程序在抛出弃用警告时选择性地引发一个错误。这对于确保开发人员不再重新引入已经修复的弃用警告非常有用。此功能是由 Test Double 的 Cliff Pruitt 实现的!

性能改进和错误修复!

发布不仅是为了让你获得惊人的功能。它还关系到修复错误、改进性能,并让 Rails 变得对每个人都更加稳定。本版本包含一项改进,它避免进行查询,只要 where 传递了一个空数组,由 Molly Struve 报告,由 John Hawthorn 实施修复。 Eileen M. UchitelleAaron Patterson 也实施了一项性能改进,当我们知道所有值都是整数时,便可以加快 where 的查询速度。

classic 自动加载程序已被弃用

classic 自动加载程序自第一个 Rails 版本发布以来一直为我们服务得很好,但现在有了一个更新更好的版本,并且它将开始其弃用周期。

强烈建议新 Rails 项目不要使用 classic 自动加载程序,并且我们建议在 classic 上运行的现有项目在升级时切换到 zeitwerk 模式。请查看升级 Ruby on Rails指南,了解相关提示。

还有更多内容!

Rails 6.1 中有如此多的重大改变。有 686 人为 Rails 做出了贡献。查看 变更日志,了解有关 bug 修复、性能改进和其他功能的更多详细信息。

感谢报告错误、发送拉取请求并协助改进 Rails 的每个人。你的辛勤工作让 Rails 变得更好了!

我们希望你能测试 Rails 6.1 并尽情享受它,就像我们一样。若有任何错误,请在 Rails 问题跟踪器 中进行报告。