Rails 6.1 RC1

2020-11-03 10:14:19

Rails 6.1的第一个候选版本已经发布,哇,它有很多很棒的东西!在过去的几个月里,我们一直在努力实现对多个数据库的改进,添加对在作业中而不是在内存中销毁关联的支持,将错误转化为对象,等等。

Rails多年来的发展令人惊讶,虽然我们需要对入职过程进行一些改进,但Rails从未像现在这样好过。此版本的功能侧重于添加您需要的功能,以使您的应用程序在未来几年保持正常运行。

Rails 6.1为您提供了按数据库切换连接的能力。在6.0中,如果您切换到读取角色,那么所有数据库连接也都切换到读取角色。现在,在6.1中,如果您在配置中将LISTICATION_CONNECTION_HANDLING设置为FALSE,Rails将允许您通过调用相应抽象类上的CONNECTED_TO来切换单个数据库的连接。

Rails 6.0提供了对数据库进行功能分区(多个分区、不同模式)的能力,但不能支持水平分片(相同模式、多个分区)。Rails不能支持水平分片,因为活动记录中的模型每个角色每个类只能有一个连接。现在已修复此问题,并且可以使用Rails进行水平切分。

除了添加水平分片支持外,我们还为多个数据库添加了大量新功能并改进了大量内部功能。Kyle Thompson添加了对数据库命名空间任务的支持,如db:schema:dump:Namespace、db:Schema:Load:Namespace、db:Structure:Dump:Namespace和db:Structure:Load:Namespace。Shopify的Jean Boussier改进了连接池管理。

除了许多数据库和连接管理改进之外,Aaron Patterson和Eileen M.Uitelle还添加了对严格加载关联的支持。使用此功能,您可以确保您的所有关联都已立即加载,并在N+1发生之前停止它们。Kevin Deisz添加了对关联声明的额外支持,bogdanvlviv添加了对默认情况下打开严格加载的支持。

Rails 6.1添加了“委托类型”作为单表继承的替代方案。这对于表示类层次结构很有帮助,允许超类成为由其自己的表表示的具体类。每个子类都有自己的附加属性表。查看由DHH编写的拉取请求。

异步销毁关联为应用程序添加了在后台作业中销毁关联的功能。这可以帮助您在销毁数据时避免应用程序中的超时和其他性能问题。实施是一个团队的努力-公关是由Basecamp的George Claghorn启动的,GitHub的Cory Gwin补充了进一步的支持,Shopify的Rafael França和Adrianna Chang最终敲定了公关。

Active Model的错误现在是具有接口的对象,该接口允许您的应用程序更轻松地处理模型引发的错误并与之交互。该功能由lulalala实现,包括一个查询接口,支持更精确的测试和访问错误详细信息。

活动存储在Rails 6.1中有了很好的更新!现在,您可以为要存储附件的服务配置附件。该功能是由德米特里·特塞佩列夫实现的。

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

如果您喜欢运行您的应用程序而不受警告,那么这个功能就是为您准备的。该功能允许应用程序在抛出弃用警告时选择性地引发错误。这对于确保开发人员不会重新引入已修复的弃用警告非常有用。该功能是由Test Double的Cliff Pruitt实现的!

发布不仅仅是关于你得到的令人惊叹的功能。它还涉及到修复错误、提高性能,并使Rails对每个人来说都更稳定。此版本包括一项改进,避免了在WHERE传递Molly Struve报告的空数组和John Hawthorn实现的修复时进行查询。Eileen M.Uitelle和Aaron Patterson还实现了性能改进,当我们知道所有值都是整数时,可以加快WHERE查询的速度。

自从第一个Rails发布以来,经典的自动加载机一直很好地服务于我们,但现在有了一个新成员,它将开始它的弃用周期。

强烈建议新的Rails项目不要使用经典自动加载器,我们建议在升级时将运行在经典自动加载器上的现有项目切换到zeitwerk模式。请查看Ruby on rails升级指南获取提示。

在Rails 6.1中有如此多的巨大变化。686人为Rails做出了贡献。有关错误修复、性能改进和其他特性的更多详细信息,请查看CHANGELOGS。

感谢报告错误、发送拉入请求并帮助改进Rails的每个人。Rails因为您的辛勤工作而变得更好!

我们希望您测试一下Rails 6.1,并和我们一样热爱它。请向Rails问题跟踪器报告任何错误。