Я работаю над приложением Rails, где я использую кеширование страниц для хранения статического html-вывода. Кэширование работает отлично. Однако у меня проблемы с истечением кешей.
Я считаю, что моя проблема частично связана с тем, что я не исчерпал кеш с моего контроллера. Все действия, необходимые для этого, обрабатываются в рамках модели. Кажется, что это должно быть выполнимо, но все ссылки на истечение срока действия кэша на основе модели, которые я нахожу, устарели или в противном случае не работают.
В моем файле environment.rb я звоню
config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )
И у меня в папке /sweepers файл LinkSweeper:
class LinkSweeper < ActionController::Caching::Sweeper
observe Link
def after_update(link)
clear_links_cache(link)
end
def clear_links_cache(link)
# expire_page :controller => 'links', :action => 'show', :md5 => link.md5
expire_page '/l/'+ link.md5 + '.html'
end
end
Итак... Почему он не удаляет кешированную страницу при обновлении модели? (Процесс: используя script/console, я выбираю элементы из базы данных и сохраняю их, но их соответствующие страницы не удаляются из кеша), и я также вызываю конкретный метод в модели Link, который обычно вызывает подметальную машину. Ничего не работает.
Если это имеет значение, кешированный файл является хешем md5 от значения ключа в таблице Links. Кэшированная страница хранится как-то вроде /l/ 45ed4aade64d427... 99919cba2bd90f.html.
По существу, похоже, что Sweeper фактически не наблюдает за Link. Я также читал (здесь), что можно было бы просто добавить подметку в config.active_record.observers в environment.rb, но это не так, t, похоже, это делает (и я не был уверен, что load_path для приложений/подметаллов в environment.rb устранил это).