ruby on rails 3 перезагрузить с использованием кэшированных данных - PullRequest
3 голосов
/ 22 марта 2011

Использование команды перезагрузки activerecord в моем приложении, похоже, использует кэшированные данные при вызове.

Я могу выполнить репликацию в отладчике, выполнив следующие действия.

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 ВЫБРАТЬ «users». * FROM «users» WHERE («users». "id" = 1) LIMIT 1

Похоже, что он использует кеш

Моя среда: Rails 3.0.3, Ruby 1.8.7, Ubuntu 10.04, PostgreSQL 8.4

Ответы [ 2 ]

8 голосов
/ 29 марта 2011

Вам необходимо выполнить запись (например, вызвав save в некоторой модели), чтобы кэш запросов был взорван.

Если вы посмотрите на свой файл development.log при выполнении reloadActiveRecord действительно выполняет запрос SELECT.Однако он не разрушает кэш запросов и используется для ответа на запрос User.find(1).

Я думаю, что перезагрузка предназначена для обновления базы данных из какой-либо другой части вашего приложения.Я также думаю, что вы можете обернуть свою находку так, чтобы избежать кеша:

ActiveRecord::Base.uncached do
  User.find(1)
end
0 голосов
/ 28 марта 2011

Убедитесь, что ваш административный инструмент действительно изменил данные в БД.Например, запишите данные одним инструментом и прочитайте эти данные другим инструментом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...