Вопрос кеширования действий 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

Дополнительная информация: Руководство по рельсам

Другие вопросы по тегам