я думаю, не работает, потому что я проверить его с реальной ситуацией дб, и всегда возвращает содержимое БДRails 4 кэширование низкого уровня не работает
- ыполните
Rails.cache.fetch
- Изменить базу данных
Выполните снова
Rails.cache.fetch
, и вот оно не должно вернуть новое значение, которое я изменил в db. но это происходит, не кэширование выполняетсякласса Translation < ActiveRecord :: Base
def self.translate(es_text,locale=I18n.locale) Rails.cache.fetch("#{es_text}/#{locale}", expires_in: 1.month) do trad=self.find_by_es_text(es_text) translated=eval("trad.#{locale}_text") return translated if translated.present? end end
конец
Тест:
Я Execute Translation.translate('Alojamiento','en')
и возвращает то, что находит на DB: "Accomodation"
Затем я изменяю таблицу базы данных, заменяя «Размещение» на «Размещение ---», и фиксирует, ...
Вернитесь к Rails, выполните то же самое Translation.translate('Alojamiento','en')
и оно вернет новое значение "Accomodation---"
!!!
Но это не должно быть! не так ли? Потому что я положил expires_in: 1.month
не в 1.second
Или, знает ли Rails, когда база данных изменена, и истекает срок действия кэша?
Я думаю, что кэш не работает, или, может быть, я пропускаю некоторые конфигурации
Спасибо большое
Один из способов сделать «это работает» (но я не» t like) перемещает код
Rails.cache...
в контроллере метода и вызывает URL-адрес, напримерwww.app/translate/Alojamiento?locale=en
. В этом случае это работает, но кеширование в модели правильнее.class ApplicationController < ActionController::Base ... def translate text_return=Rails.cache.fetch("#{params[:es_text]}/#{params[:locale]}", expires_in: 1.month) do Translation.translate(params[:es_text],params[:locale]) end render text: text_to_return end
Вы видите это в своей среде разработки? Убедитесь, что 'config/environment/development.rb' не имеет' config.cache_store =: null_store', который отключил бы кеширование. – SteveTurczyn
Нет, в производственной среде, на двух разных серверах (локальных, через рельсы s -e producion.И сервер производства Apache). –
Я думаю, что у Rails.cache.fetch есть что-то, что делает его другим, если оно выполняется в модели или контроллере –