即将来临的 Rails 4.0 将放弃 Ruby 1.8 支持,改进后台任务、缓存等多项内容

  • Mirko Stocker
  • 丁雪丰

2012 年 9 月 27 日

话题:Web框架Ruby on Rails语言 & 开发

2012 年 1 月发布的 Rails 3.2 在这一年里进行了一些日常更新——几周前刚发布了 3.2.8 版本。去年,Rails/master 分支已经切换到了 4.0.0.beta 版本,4.0 版本的发布暂时安排在 2012 年夏季。虽然没有公布新的发布日期,但 Rails 4.0 的组成越来越明朗了:在Boston RB 的一场演讲里,Rails 的贡献者Prem Sichanugrist大概介绍了一下 Rails 4.0 里将发生的变化。主要的特性也罗列在这份版本说明草案里,其中包括:

  • 只支持 Ruby 1.9.3
  • 强参数
  • Queue API
  • 缓存改进

去年,DHH 宣布了放弃 Ruby 1.8 的决定,因此 Rails 4.0 不支持 Ruby 1.8 也没什么好奇怪的,距离 Ruby 1.8 的末日又近了一步。

强参数提供了 mass-assignment 保护,其做法是将参数移动到正确的地方:放在控制器里,而非模型里。新的方法在过滤参数时更加方便,哪个参数是允许的也更加明显了。此外,“可以将参数标记为必须的,在预先定义的 raise/rescue 流程中最终轻松流转到 400 Bad Request。”也可以通过插件在 Rails 3.2.8 里使用强参数。

ActiveSupport::Queue继承自标准的 Ruby 队列,在一个后台线程里运行队列任务。任务就是一个简单的对象,带有run方法。为了让测试更简单,队列系统是可配置的,可以改为同步处理任务。

Cache Digests是一个新的插件,让 Russian-doll 缓存方案更易维护,这种缓存方案需要手工查找并增加依赖模版的版本号:

深入 Cache Digests:有了这个插件,视图中所有对 #cache 的调用都会自动追加一段该模版及其所有依赖的摘要!因此,不再需要手动增加你正修改模版的版本号,或者关心那些依赖于此的其他模版,

Rails 4 还将支持HTTP/1.1 PATCH 方法

多个扩展了 Hypertext Transfer Protocol(HTTP)的应用程序需要一种特性来进行部分资源修改。现有的 HTTP PUT 方法只允许完整替换文档。[RFC 5789] 添加了一个新的 HTTP 方法——PATCH,用它可以修改已有的 HTTP 资源。

PATCH 和 PUT 一样,都会被映射为update方法,因此不会破坏向后兼容性。Rails Issue Tracker 上的讨论中有更多关于其动机和结果的信息。

其他的新特性和改变包括导出 Schema 的缓存PostgreSQL 数组支持、用来清理重复路由的Routing Concerns以及对 ActiveRecord::Relation 的更新。

新版本一如既往地祈免了一些过时的特性。版本说明草案里已经包含了一份祈免组件和方法的清单。其中一些东西只是移到了自己的 gem 里,比如 ActiveRecord::SessionStore 和 ActiveResource。Prem Sichanugrist 在他的访谈里概述了新的祈免策略:Rails 4.0 一经发布,Rails 3.1 就将完成自己的使命,一些 3.2 的特性会带有祈免警告,这些特性会在 Rails 4.1 版本中被移除。这应该能实现 3.2 到 4.0 的平滑升级,不会带来大的风险。

目前还没有发布 Rails 4.0 的 RC 版本,但应该会在圣诞前发布。

查看英文原文:Upcoming Rails 4.0 Release Drops Ruby 1.8 Support, Improves Background Jobs, Caching And More

Web框架Ruby on Rails语言 & 开发