2009 年 2 月 27 日,星期五

新版 Edge Rails

发布人:Mike Gunderloy

2009 年 2 月 14 日至 2009 年 2 月 27 日

细心的你会注意到,本周涵盖了两周的内容。随着 Rails 2.3 版的临近发行,核心团队对于加入源代码的内容变得挑剔,并且致力于修复错误。你很快将会看到 Rails 2.3 RC2 版,那可能是最后一个候选版本。因此,如果你尚未在 Rails 2.3 版上测试过自己的应用程序,那么现在正是这样做的时候。现在最新的代码通常很稳定,因此非常适合查看。

批量处理

你现在可以使用 find_in_batches 从 ActiveRecord 模型中处理大量记录,从而减少内存压力


Customer.find_in_batches(:conditions => {:active => true}) do |customer_group|
  customer_group.each { |customer| customer.update_account_balance! }
end

你可以将大多数 find 选项传递给 find_in_batches。但是,你无法指定返回记录的顺序(始终按主键升序返回,它必须为整数),也不能使用 :limit 选项。相反,应使用 :batch_size 选项(默认为 1000)来设置每批返回的记录数。

新的 each 方法提供了 find_in_batches 的包装器,返回单个记录,并且查找本身是在批次中进行的(默认情况下为 1000 个)


Customer.each do |customer|
  customer.update_account_balance!
end

请注意,你仅应在有足够的记录来证明需要进行批量处理时才使用此方法:对于少量的记录(少于 1000 个),你应只使用常规查找方法和自己的循环。

提交

关于模板加载的说明

经过多位作者的广泛研究(这是 Lighthouse 工单),Rails 2.3 加入用于任何特定环境启用或禁用缓存模板的能力。缓存的模板可提升你的速度,这是因为它们在渲染时不检查新模板文件,但这也意味着你不能“动态”替换模板而无需重启服务器。

在大多数情况下,你希望在生产环境中启用模板缓存,你可以通过在你的 production.rb 文件中进行设置来实现


config.action_view.cache_template_loading = true

此行会默认在新版 Rails 2.3 应用程序中为你生成。但请注意:如果你已经从旧版 Rails 升级,那么你的 production.rb 中将不含此设置,并且默认情况下模板缓存将关闭。除非你确实需要在不重新启动服务器的情况下更新生产环境中的模板,否则你在升级时应该确保添加此设置。