Вопрос кеширования действий Rails
Я не совсем уверен, как убедиться, что мое кэширование работает, но я уверен, что это не так. У меня есть пользовательский контроллер с индексным действием, которое я кэширую до тех пор, пока не будет создан новый пользователь. Вот код:
UsersController < ApplicationController
caches_action :index
def index
@users = User.all
end
def create
expires_action :index
...
end
end
Теперь в моих журналах, когда я получаю доступ к index
действие, я вижу:
Cached fragment hit: views/localhost:3000/users (0.0ms)
Filter chain halted as [#<ActionController::Filters::AroundFilter:0xe2fbd3 @identifier=nil, @kind=:filter, @options={:only=>#<Set: {"index", "new"}>, :if=>nil, :unless=>nil}, @method=#<Proc:0x186cb11@/Users/bradrobertson/.rvm/gems/jruby-1.5.3/gems/actionpack-2.3.10/lib/action_controller/caching/actions.rb:64>>] did_not_yield.
Я не уверен, что filter chain halted ... did_not_yield
это все, и я также вижу, что это select * from users
... мне звонят каждый раз, а это не то, что я ожидал.
Может ли кто-нибудь объяснить мне, что здесь происходит, и почему это не так, как я ожидал? то есть. почему User.all будет работать, когда выходные данные всего этого действия должны быть кэшированы?
1 ответ
filter chain halted
сообщение означает, что существует обходной фильтр, который останавливает действие от вызова. Скорее всего, это кеш действий, который останавливает реальные действия. Он не поддался действию, потому что он нашел что-то в кеше, как указано в сообщении над ним.
User.all
не должен запускаться вообще, потому что он находится в действии, но любой до запуска фильтров. Если ваша страница находится за какой-либо формой аутентификации, тогда проверка аутентификации могла бы инициировать вызов SQL. Так что вы можете перепроверить, откуда на самом деле берется журнал SQL.
Кроме того, правильный синтаксис (в соответствии с руководством по рельсам) для истечения срока действия:
expire_action :action => :index
Дополнительная информация: Руководство по рельсам