Очистка кеша ActiveRecord

если имя коллекции "my.collection"

db.my.collection.findOne (); // OK
null

, если имя коллекции «my.1.collection»

db.my.1.collection.findOne () ; // Не в порядке
SyntaxError: missing; перед оператором

Исправлено:

дБ ["my.1.collection"]. findOne (); // Теперь все в порядке
null

22
задан Prashant 18 September 2010 в 07:02
поделиться

4 ответа

В первом приближении:

ActiveRecord::Base.connection.query_cache.clear
33
ответ дан 29 November 2019 в 05:00
поделиться

Мы используем:

ActiveRecord::Base.connection.query_cache.clear
(ActiveRecord::Base.connection.tables - %w[schema_migrations versions]).each do |table|
  table.classify.constantize.reset_column_information rescue nil
end

Но я не уверен, что даже этого достаточно.

2
ответ дан 29 November 2019 в 05:00
поделиться

Взгляните на метод clear_query_cache в http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/QueryCache.html

.
2
ответ дан 29 November 2019 в 05:00
поделиться

Часто, когда вы видите кеширование запросов к базе данных, ваша БД выполняет кеширование, а не ActiveRecord, что означает, что вам нужно очистить кеш и буферы на уровне БД, а не на уровне ActiveRecord.

Например, чтобы очистить кэш и буферы Postgres на Mac, вы должны сделать sudo purge, что заставляет дисковый кеш очищаться и очищаться.

Чтобы очистить кэш и буферы Postgres в Linux, вы должны выключить postgres, удалить кэши и снова запустить postgres:

service postgresql stop
sync
echo 3 > /proc/sys/vm/drop_caches
service postgresql start

Дальнейшее чтение:

-1
ответ дан 29 November 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: