2012年1月20日,星期五

Rails 3.2.0:更快的开发模式和路由、查询解释、标记化日志记录、存储

作者:David

所以,我们没有像预期的那样赶上12月的发布日期,但嘿,为什么我们要打破一个好的传统,现在开始按时完成发布目标呢!无论如何,您的耐心得到了极大的回报,年轻的草蜢:Rails 3.2 已经完成、烘焙、测试并通过,随时准备发布!

我已经在 Basecamp Next 上运行 3-2-stable 版本几个月了,这是一种真正的享受。特别是新的更快开发模式,相比 3.1 是一个巨大的进步。

请注意,这是最后一个预计将支持 Ruby 1.8.7 的发布系列。Rails 的主 git 分支现在将目标定为 Rails 4.0,这将需要 Ruby 1.9.3 及更高版本。所以,现在是时候开始为您的应用程序做好准备,使其兼容当前版本的 Ruby 了。我们不要像那些 Python 哥们一样永远停留在旧版本上。

Github 上有一个 v3.2.0 标签,我们当然也有 3-2-stable 分支。您可以在我们的 CHANGELOG 编译中看到所有更改的辉煌细节。

在文档方面,我们有 3.2 版本说明及升级说明,API 文档和指南都已为 3.2 生成,并且有一个全新的与 3.2 兼容的 Agile Web Development with Rails 版本。真是一场盛宴!

注意:如果您在 Ruby 1.8.7 下安装 gem 时遇到问题,您很可能遇到了 RubyGems 的一个 YAML bug,该 bug 已在 RubyGems 1.8.15 中修复。您可以使用“gem update —system”来升级 RubyGems。

如果您不想阅读完整的发布说明,这里重印了一些我们在第一次发布候选版本时的一些主要功能亮点

更快的开发模式和路由

最引人注目的新功能是开发模式变得极其快。受 Active Reload 的启发,我们现在只重新加载您实际更改过的文件中的类。在大型应用程序上,这种差异是戏剧性的。

得益于新的 Journey 引擎,路由识别也变得更快,我们还加快了链接的速度(当您在一个页面上有 100 多个链接时,这一点尤为明显)。

解释查询

我们添加了一种快速简便的方法来解释 ARel 生成的查询。在控制台中,您可以运行类似 `puts Person.active.limit(5).explain` 的命令,您将看到 ARel 生成的查询解释(这样您就可以轻松地看到它是否使用了正确的索引)。在开发模式下,甚至有一个默认阈值,如果查询运行时间超过半秒,它将自动内联解释——这怎么样!

带标签的日志记录器

当您运行多用户、多账户应用程序时,能够按用户和操作过滤日志将非常有帮助。引入 TaggedLogging 包装器。它的工作方式如下:

Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff"
Logger.tagged("BCX") do
  Logger.tagged("Jason") do
    Logger.info "Stuff" # Logs "\[BCX\] \[Jason\] Stuff"
  end
end

Active Record Store

键值存储很棒,但您不总是想为了少量变量键操作而付出全部努力。引入 Active Record Store。

class User < ActiveRecord::Base
  store :settings, accessors: [ :color, :homepage ]
end
 
u = User.new(color: 'black', homepage: '37signals.com')
u.color                          # Accessor stored attribute
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor