2016年6月30日,星期四

Rails 5.0:Action Cable、API 模式以及更多

由 dhh 发布

经过六个月的打磨、四个 Beta 版本和两个发布候选版本,Rails 5.0 终于完成了!它汇集了数百名贡献者和数千次提交才得以问世,但这是一个多么棒的目的地:Rails 5.0 无疑是迄今为止最好、最完善的版本。令人难以置信的是,这个社区在如此长的时间里依然如此充满活力。感谢所有帮助我们走到今天的人。

Rails 5.0 的两大亮点功能如下:

Action Cable

Action Cable 是 Rails 中一个全新的 WebSocket 处理框架。它是一个完全集成的解决方案,用于管理连接、服务器端处理的通道层以及客户端交互的 JavaScript 层。它使用起来极其简单,可以让你更轻松地设计实时功能,例如聊天、通知和在线状态。如果你想亲眼看看它的实际应用,它可以驱动Basecamp 3的所有这些功能。

Action Cable 最可爱的地方在于,你可以在 WebSocket 工作中访问你所有的 Active Record 和 PORO 领域模型。我们甚至还增加了一个全新的ActionController::Renderer系统,这使得在控制器外部渲染模板变得轻而易举,当你想要为 WebSocket 响应重用服务器端模板时。

在开发环境中,Action Cable 与你的应用程序的其余部分同进程运行。为此,我们将默认开发服务器从 Webrick 切换到了Puma。在生产环境中,你可能希望将 Action Cable 服务器运行在自己的进程中。我们 Basecamp 就是这样大规模运行的。

特别感谢Pratik NaikJavan MakhmaliMatthew Draper 在 Action Cable 方面所做的开创性工作。

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 命令取代了 rake 和 rails 之间的分裂脑设置,所以现在是 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’)) 得到的就是你所期望的结果!
  • 不再会因为最后一个语句为 false 而意外中断 Active Record 回调。现在你需要显式地抛出 throw(:abort)!

不过,你真的应该看看 CHANGELOGs。所有框架中都有太多新颖且优质的功能。

Rails 5.0 还附带了Turbolinks 5——那个带有原生 iOS 和 Android 包装实现的版本!如果你以前就忽略了 Turbolinks,我强烈建议你观看 Sam Stephenson 在 RailsConf 上的演讲:Turbolinks 5: I Can’t Believe It’s Not Native!

完整的 Rails 5.0 发布说明中有更多详细信息,Claudio B. 还制作了一个很棒的幻灯片集,介绍了他最喜欢的一些改进(和移除!)。我还制作了一个全新的使用 Rails 5 构建博客视频来演示基本用法。

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

注意:根据我们的维护政策,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 5.0+ 的唯一支持版本。