Вопрос о кэшировании рельсов
-
15-10-2019 - |
Вопрос
Я не совсем уверен, как убедиться, что мое кэширование работает, но я уверен, что это не так. У меня есть контроллер пользователей с индексным действием, которое я кэширую действие, пока не будет создан новый пользователь. Вот код:
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
... каждый раз называют, что я не ожидал.
Может ли кто -нибудь просветить меня в отношении того, что здесь происходит и почему это не ведет себя так, как я ожидал? т.е. Почему пользователь. Все будут работать, когда все это вывод этого действия должен был быть кэширован?
Решение
А filter chain halted
Сообщение означает, что есть вокруг фильтра, который мешает вызову действия. Это, вероятно, будет кеш действий, который останавливает реальное действие. Это не так урожай к действию, потому что оно нашло что -то в кэше, как предложено сообщение над ним.
А User.all
Не следует запускать вообще, потому что оно в действии, но любые до того, как фильтры будут запускаться. Если ваша страница стоит за какой -то формой аутентификации, проверка аутентификации могла бы вызвать вызов SQL. Таким образом, вы можете дважды проверить, откуда на самом деле берется журнал SQL.
Кроме того, правильный синтаксис (по крайней мере, в соответствии с руководством Rails) для истечения:
expire_action :action => :index
Больше информации: Руководство