質問

キャッシュが機能していることを確認する方法はよくわかりませんが、そうではないと確信しています。新しいユーザーが作成されるまでアクションキャッシュするインデックスアクションを備えたユーザーコントローラーがあります。これがコードです:

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が実行されるのですか?

役に立ちましたか?

解決

filter chain halted メッセージとは、アクションが呼び出されないようにする際のフィルターがあることを意味します。これはアクションキャッシュである可能性が高く、実際のアクションが発生しないようにします。それはしませんでした 収率 アクションに、上記のメッセージで示唆されているように、キャッシュ内で何かを見つけたからです。

User.all それはアクション中であるため、まったく実行されるべきではありませんが、フィルターが実行される前はいつでも実行されます。ページが何らかの形の認証の背後にある場合、認証チェックがSQLコールをトリガーした可能性があります。したがって、SQLログが実際にどこから来たのかを再確認することをお勧めします。

また、期限切れのための適切な構文(少なくともRails Guideによると)は次のとおりです。

expire_action :action => :index

より詳しい情報: Rails Guide

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top