2012-02-13 8 views
2

Rails 3.2を開発モードで使用して、簡単なページキャッシュをテストしようとしています。Rails 3.2でのキャッシュミスや開発中のページキャッシュ - 他に誰か?

pages_controller.rb

class PagesController < ActionController::Base 

    caches_page :index, :show 

    def index 
    @pages = Page.all 
    end 

    def show 
    @page = Page.find(params[:id]) 
    end 

end 

development.rb

config.action_controller.perform_caching = true 

application.rb

config.action_controller.page_cache_directory = File.join(Rails.root, 'public') 

W hen私はこのセットアップをテストし、通常のようにこれらのアクションを処理していると思われ、ページキャッシュは期待どおりに書き込まれます。

    キャッシュを欠場するようだ
  1. 、しかし...
  2. 要求はその後、コントローラをロードしていないようだ、任意のクエリを実行し、その他:しかし、後続の要求は私が混乱している、次の二つのことを報告し私はそれがキャッシュからロードされたと信じてくれました。

はここで何、ログ最初のリクエストに応じて出力し、その後5つのリロード:キャッシュはそれが欠けていると言う理由

Started GET "/pages" for 127.0.0.1 at 2012-02-12 21:01:24 -1000 
Processing by PagesController#index as HTML 
    Page Load (0.2ms) SELECT `pages`.* FROM `pages` 
    Rendered pages/index.html.erb (0.8ms) 
Write page /Users/ckihe/Sites/experiment/public/pages.html (0.3ms) 
Completed 200 OK in 3ms (Views: 1.9ms | ActiveRecord: 0.2ms) 
cache: [GET /pages] miss 
cache: [GET /pages] miss 
cache: [GET /pages] miss 
cache: [GET /pages] miss 
cache: [GET /pages] miss 

誰もが任意のアイデアがありますか?

答えて

4

キャッシュが発生する方法は複数あります(いくつかの冗長性があります)。

レール3.1より、Rack::Cacheがセットアップされています。これは、すべての有効期限、etagsなどを理解し、さまざまなキャッシュストアにデータを格納できるhttpレベルのキャッシュです。これはおそらく、ページをキャッシュできるようにするキャッシュコントロールヘッダーを表示していないために、キャッシュミスを報告しています(expires_inまたはfresh_whenヘルパーを参照)。

設定した並べ替えのページキャッシュは古いものであり、完全にdIfferentlyで動作します。レンダリングされたHTMLを任意のディレクトリにダンプし、レールは静的アセットとして提供します(実稼働環境では、Rubyレベルのコードに触れることなくWebサーバーから直接提供するように設定します)。このキャッシングはあまりスマートではなく、httpキャッシュコントロールヘッダーなどについては何も知らない(ただし、非常に高速です)。

要約すると、お互いに気づいていない2つのキャッシングスキームがあります。その理由の1つでは、どちらか一方からのミスと他方からのヒットがあります。

+1

これに遅れて申し訳ありません。これは間違いなく正しいトラックに私を置いた...私は間違いなくページキャッシュを見ることによって "混乱していた"がログに "キャッシュミス"が見える。 – simplesessions

関連する問題