眼尖的读者会注意到,本周的“本周回顾”涵盖了两周的内容。随着 Rails 2.3 的发布临近,核心团队在代码提交方面变得更加挑剔,并专注于修复 bug。预计 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 条),您应该直接使用常规的 find 方法并进行自己的循环。
经过几位作者的广泛工作(这是 Lighthouse 票据),Rails 2.3 增加了在任何特定环境中启用或禁用缓存模板的功能。缓存模板可以提升速度,因为它们在渲染时不会检查新的模板文件——但这也意味着您无法在不重启服务器的情况下“即时”替换模板。
在大多数情况下,您希望在生产环境中启用模板缓存,您可以通过在 production.rb 文件中进行设置来实现。
config.action_view.cache_template_loading = true
在新的 Rails 2.3 应用程序中,此行将默认生成。但请注意:如果您是从旧版本的 Rails 升级的,您的 production.rb 文件中将没有此设置,并且模板缓存将默认关闭。除非您确实需要在不重启服务器的情况下更新生产环境中的模板,否则在升级时请务必添加此设置。