2012 年 1 月 20 日,星期五

Rails 3.2.0:更快的开发模式和路由,解释查询,标记的记录器,存储

由 David 发帖

因此我们未能按预期在 12 月发布,但嘿,为何要破坏一个好传统,并开始制定发布目标呢!不管怎样,你们关于 Rails 3.2 的忍耐都得到了世俗的回报:Rails 3.2 已完成、通过测试,并准备好推出!

我一直在使用 3-2-stable 运行数月,致力于 Basecamp Next,受益匪浅。尤其是新的、更快的开发模式是 3.1 中的一大步提升。

请记住,这是预定支持 Ruby 1.8.7 的最后一个发布系列。Rails 的主 git 分支现针对 Rails 4.0,它需要使用 Ruby 1.9.3 及更高版本。因此现在是开始着手让你的应用程序为当前版本的 Ruby 做好准备的好时机。让我们不要永远停留在过时版本中,就像那些 Python 专家 :)。

Github 中有一个 v3.2.0 标记,当然我们也有 3-2-stable 分支。你可以在我们的 变更日志汇编中查看有关所有变更的荣耀细节。

对于文档,我们有 带升级说明的 3.2 发布说明API 文档指南 也都已为 3.2 生成,并且有一个与 Rails 中敏捷 Web 开发完全兼容的 3.2 版本。名符其实的斯堪的纳维亚自助餐!

注意:如果您在 Ruby 1.8.7 下安装 gem 时遇到问题,您可能遇到了已在 RubyGems 1.8.15 中修复的 RubyGems YAML bug。您可以使用 "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

活动记录存储

键值存储非常棒,但对于轻型的可变键操作来说,你没必要耗费全力。这就是活动记录存储的用武之地

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