Отмена кеширования фрагмента при исключении - PullRequest
1 голос
/ 31 января 2010

Если я кеширую ответ rss следующим образом:

<% cache do %>
  <%= fetch_rss(http://example.org) %>
<% end %>

как я могу предотвратить его кеширование, если rss не возвращается правильно? то есть если fetch_rss возвращает исключение или возвращает «Not Found»

Ответы [ 2 ]

0 голосов
/ 06 февраля 2010

Переместите метод fetch_rss в свой контроллер, к которому он относится, затем обработайте известные исключения:

def index
  begin
    @rss = fetch_rss

    # Caching can be done here ...
  rescue InvalidRssError, NotFoundError => e
    # ...
  end
end

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

0 голосов
/ 31 января 2010

Tricky.

Пара идей.

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

В качестве альтернативы, вы можете получить извлечение для выдачи ошибки, а затем обернуть в обработчик исключений. Если есть исключение, вы бы поймали и вызвали expire_fragment .

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