Проблема с кэшированием фрагментов Rails 3 - PullRequest
0 голосов
/ 25 мая 2011

Я сталкиваюсь с проблемой при изучении кэширования на уровне фрагментов в моем приложении Rails 3.0.4 с помощью memcached.Я немного запутался в происходящем, но думаю, что это связано с тем, как вывод выводится из области кэширования.Я запускаю memcached локально в режиме -vv и могу видеть, что ключ для фрагмента сохраняется / извлекается правильно, проблема в значении элемента в memcached.

Вот что я делаю:

< ... html before ... >
<%= cache("item_#{i.id}") do %>
    <%= render :partial => 'shared/item', :locals => { :item => i, :functionality => [:set_as_default] } %>
<% end %>
< ... html after ... >

Когда я смотрю на значение ключа в кеше, у него есть html изнутри страницы, которая находится в этом фрагментном блоке кеша, но ТАКЖЕ ВНЕ этого (как из html до, так и html послерайоны).Здесь есть интересная часть, и, по-моему, это одна из причин, по которой я думаю, что она связана с захватом выходных данных - она ​​не выполняет всю страницу, только некоторые HTML до и некоторые после.

Согласноруководство по кэшированию фрагментов рельсов, я думаю, что я все делаю правильно (http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching). У кого-нибудь есть мысли относительно того, что может происходить?

Ваша помощь очень ценится!

-Eric

1 Ответ

3 голосов
/ 15 июня 2011

В этом случае вы используете ERB неправильно.В основном уберите знак =.Что вы делаете, так это возвращаете значение блока и, следовательно, почему вы видите двойной вывод.

<% cache ("item _ # {i.id}") do%>

Кроме того, объекты ActiveRecord отвечают внутренне запеченному в методе #cache_key.Попробуйте воспользоваться этим.Стандартный #cache_key для объекта ActiveRecord также использует имя класса, идентификатор объекта и отметку времени updated_at.Метод cache должен иметь возможность принимать несколько аргументов или массив, и он будет вызывать cache_key для каждого объекта, который на него реагирует.Используя этот метод, это означает, что вы будете кэшировать промах, когда объект обновляется до довольно классного материала.Итак, IIRC

<% кеш ("элемент", i) do%>

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