2015年12月18日,星期五

Rails 5.0.0.beta1:Action Cable、API 模式、Rails 命令

由 dhh 发布

Rails 5.0!你敢相信吗?我们刚刚才庆祝了 Rails 1.0 发布十周年。时间过得真快,当你与好友们一起愉快地玩耍时,在 Rails 社区,我们从未有过如此多的乐趣或更好的朋友,所以难怪它能如此顺利地推进!这只是第一个 beta 版本,但 Rails 5.0.0.beta1 已经在生产环境上运行 Basecamp 3 了。

Action Cable

Rails 5.0 中最大的亮点是全新的 WebSocket 处理框架,名为 Action Cable。它是一个完全集成的解决方案,包含一个由 EventMachine 驱动的连接循环,一个用于服务器端处理的基于线程的频道层,以及一个用于客户端交互的 JavaScript 层。它使用起来非常简单,并使设计实时功能(如聊天、通知和状态显示)变得更加容易。如果您想亲眼看看它的实际应用,它正是 Basecamp 3 所有这些功能的驱动力。

Action Cable 最棒的地方在于,您可以在 WebSocket 操作中访问整个 Active Record 和 PORO 领域模型。我们甚至增加了一个全新的 ActionController::Renderer 系统,它让您在控制器外部渲染模板变得轻而易举,这样您就可以重用服务器端模板来响应 WebSocket 请求。

在开发环境中,Action Cable 与您的应用程序的其他部分运行在同一进程中。为了实现这一点,我们将默认的开发服务器从 Webrick 切换到了 Puma。在生产环境中,您可能希望将 Action Cable 服务器运行在它们自己的进程中。这正是我们在 Basecamp 进行大规模部署的方式。

特别感谢 Pratik NaikJavan Makhmali 为其奠基性工作付出的努力。

API 模式

Rails 不仅是构建使用服务器端渲染 HTML 模板的全栈应用程序的绝佳选择,也是新一代仅需要后端提供 JSON 的客户端 JavaScript 或原生应用程序的绝佳伴侣。通过新的 –api 模式,我们已经让这一点更加清晰。如果您使用 rails new backend --api 创建一个新的 Rails 应用程序,您将获得一个精简的骨架和配置,该配置假定您将使用 JSON 而不是 HTML。

这项功能还有更多工作要做,但我们已经取得了良好的开端。默认情况下,API 模式仅依赖于模型类的 #to_json 调用。但您可以使用 JbuilderActive Model Serializers,或者查看新的 JSONAPI::Resources 项目以获得更高级的解决方案。

特别感谢 Santiago PastorinoJorge Bejar 的贡献,使之成为可能。

一个 Rails 命令,统一所有命令

为什么有些命令在 bin/rails 中,而有些命令在 bin/rake 中?这是一个常见的问题,尤其是对于初学者,我们从未给出一个好的答案(只有很多技术性的借口)。所以现在我们致力于让 bin/rails 成为那个统一所有命令的主命令。您可以通过它来访问所有 rake 命令,并且我们最终会将其中许多命令迁移过来。因此,您的手指现在需要习惯使用 bin/rails db:migrate 而不是 bin/rake db:migrate。这应该只需要几个月的时间!

Kasper Timm Hansen 一直负责这个项目。

其他一些亮点

  • 新的 Attributes API,由 Sean Griffin 开发。
  • 测试运行器现在会内联报告失败,这样您就不必完成整个测试套件才能看到哪里出了问题。
  • ApplicationRecord 已成为所有由生成器创建的模型默认的父类。
  • ActiveRecord::Relation#in_batches 使得一次处理大量记录以便减少内存过载变得更加容易。
  • Post.where(‘id = 1’).or(Post.where(‘id = 2’)) 的结果正如您所期望的那样!
  • Active Record 回调不会再因为最后一个语句为 false 而意外中断。现在您需要显式地 throw(:abort)!

您真的应该查看 CHANGELOGs。在所有框架中都有太多新的、好的内容。

Claudio 制作了一个 很棒的幻灯片集,其中介绍了他最喜欢的一些改进(和移除!)。

请注意,我们还在开发 Turbolinks 5——它包含了原生的 iOS 和 Android 包装器实现!——计划与 Rails 5 同时发布。您可以在 basecamp/turbolinks/v5 上关注进度。

维护策略

根据我们的 维护策略,Rails 5.0 的发布意味着错误修复将仅适用于 5.0.x 版本,常规安全问题将适用于 5.0.x 和 4.2.x 版本,而严重的安全性问题也将适用于 5.0.x 和 4.2.x 版本(但当 5.1 发布时,将适用于 5.1.x、5.0.x 和 4.2.x)。这意味着 4.1.x 及以下版本基本上将不受支持!Ruby 2.2.2+ 现在也是 Rails 支持的唯一 Ruby 版本。

请帮助我们让 Rails 5.0 更加稳定!

我们依赖社区所有人的反馈来在正式发布之前解决 bug 和升级问题。因此,请在您的应用程序中尝试使用 Rails 5.0,如果您今天正在启动一个新项目,并且您对 Rails 有一点了解,那么您应该使用 beta1 版本。

可以在 Github issues tracker 上提交问题。

到目前为止,已经有 789 人为这个新版本的 Rails 做出了贡献。请加入我们,成为其中一员!

Rails 5.0 的动态发布经理组合是 Eileen M. UchitelleSean Griffin。而无可争议的 PR 合并冠军是 Rafael França