2012-02-13 23 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¯¯當我測試這個設置時,它似乎像正常一樣處理這些操作,並且頁面緩存按預期寫入。然而,隨後的請求報告已經我困惑的是以下兩點:

  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

有多種方法可以進行緩存(並且是有一些冗餘)。

從開始(我認爲)爲您設置了rails 3.1,Rack::Cache。這是一個http級別的高速緩存,可以理解所有關於到期時間,etags等,並可以將數據存儲在各種緩存存儲中。這是報告高速緩存未命中的原因,可能是因爲您沒有發出允許高速緩存頁面的高速緩存控制標頭(請參閱expires_infresh_when幫助程序)。

頁面緩存您配置的排序方式較老,完全不同。它將呈現的HTML轉儲到您選擇的目錄中,然後Rails將它們作爲靜態資源提供(在生產中,您可以將其配置爲直接從Web服務器提供,而不觸及ruby代碼)。這種緩存不太聰明,對http緩存控制頭文件一無所知(但另一方面速度非常快)。

總而言之,你有兩個緩存方案,它們不知道彼此,這就是爲什麼你從其中一個錯過而另一個命中。

+1

對不起,遲到的迴應。這絕對會讓我走上正確的軌道......看到頁面緩存「工作」,但看到日誌中的「緩存未命中」,我感到非常困惑。 – simplesessions 2012-02-21 01:27:56