ruby on rails 3使用缓存数据重新加载

时间:2011-03-21 22:31:00

标签: ruby-on-rails activerecord

在我的应用程序中使用activerecord reload命令似乎在调用时使用了缓存数据。

我可以通过执行以下操作在调试器中复制。

u = User.find(1)
u.first_name
#outputs bob

# manually change first_name for record 1 to jim with PGadmin or with rails console

u.reload
u.valid?
#outputs true
u.first_name
#outputs bob

#if i do this again
u = User.find(1)
#old data again
u.first_name
#outputs bob

#if i load data this way
u = User.where('id = 1').first
#new data
u.first_name 
#outputs jim

在运行重新加载后查看我的日志文件时,它会打印出来

[1m [35mCACHE(0.0ms)[0m SELECT“users”。* FROM“users”WHERE(“users”。“id”= 1)LIMIT 1

所以似乎正在使用缓存

我的环境:Rails 3.0.3,Ruby 1.8.7,Ubuntu 10.04,PostgreSQL 8.4

2 个答案:

答案 0 :(得分:8)

您需要进行写操作(例如,通过在某个模型上调用save),以便查询缓存被炸毁。

如果在执行reload时查看development.log,ActiveRecord会发出SELECT查询。但是,它不会破坏查询缓存,而是用于回答User.find(1)查询。

我认为重新加载是指从应用程序的其他部分更新数据库时。我也认为你可以像这样包装你的发现以避免缓存:

ActiveRecord::Base.uncached do
  User.find(1)
end

答案 1 :(得分:0)

确保您的管理工具确实更改了数据库中的数据。例如,通过一个工具写入数据,并通过其他工具读取此数据。