Вопрос о кешировании действий Rails - PullRequest
1 голос
/ 04 января 2011

Я не совсем уверен, как убедиться, что мое кэширование работает, но я почти уверен, что это не так.У меня есть пользовательский контроллер с индексным действием, которое я кэширую до тех пор, пока не будет создан новый пользователь.Вот код:

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 Ответ

6 голосов
/ 05 января 2011

Сообщение filter chain halted означает, что существует обходной фильтр, который останавливает действие от вызова.Скорее всего, это кеш действий, который останавливает реальные действия.Он не выдал действию, потому что он обнаружил что-то в кеше, как указано в сообщении над ним.

User.all вообще не должен запускаться, потому что оннаходится в действии, но все фильтры будут запущены.Если ваша страница находится за какой-либо формой аутентификации, то проверка аутентификации могла бы инициировать вызов SQL.Поэтому вам может потребоваться перепроверить, откуда на самом деле идет журнал SQL.

Кроме того, правильный синтаксис (по крайней мере, согласно руководству по rails) для истечения срока действия:

expire_action :action => :index

Подробнее: Направляющий рельс

...