2011-06-15 53 views
5

我有以下控制器,當它收到一個HTTP請求到返回的標籤列表/標籤緩存一個JSON結果中的Rails

class TagsController < ApplicationController 
    caches_page :index 

    def index 
    respond_to do |format| 
     format.json { 
     render :json => Tag.all(:order => "name").to_json 
     } 
    end 
    end 
end 

我注意到,每當請求到/標籤製成Rails正在/public/tags.json生成一個緩存文件。但是,它似乎永遠不會使用此緩存文件。相反,它始終運行在SQL查詢來檢索標籤:

Started GET "/tags" for 127.0.0.1 at 2011-06-15 08:27:29 -0700 
    Processing by TagsController#index as JSON 
    Tag Load (0.7ms) SELECT "tags".* FROM "tags" ORDER BY name 
Write page <project root path>/public/tags.json (0.3ms) 
Completed 200 OK in 35ms (Views: 1.1ms | ActiveRecord: 0.7ms) 

爲什麼不Rails的您使用了生成緩存文件?是因爲請求是針對/ tags而不是/tags.json?

回答

2

我想你可能是正確的,你可以指定:cache_path選項告訴它什麼名字的文件,這樣做

caches_page :index, :cache_path => '' # if not try 'tags' 

,你也可以通過一個進程,如果你想包括PARAMS

caches_page :index , :cache_path => Proc.new {|controller| controller.params } 

或其他任何東西

+0

嗯,我試過了,它仍然表現出相同的行爲(保存到/public/tags.json)。 – 2011-06-15 17:26:19

+2

以及頁面緩存的工作方式,它只是在公共場合生成靜態頁面,這些頁面被Web服務器抓取而沒有接觸到導軌。所以你必須得到rails以不同的名字來保存它們,或者讓你的web服務器(Apache或其他)擁有該文件的別名。或者讓客戶請求帶有擴展名的頁面。至少我認爲像這樣的東西應該工作 – loosecannon 2011-06-15 19:57:53

+0

如果它只回應json,取出respond_to塊,那是​​什麼附加.json可能 – loosecannon 2011-06-15 19:59:24

0

您的緩存目錄可能位於錯誤的地方。在嘗試將緩存放置在公共目錄以外的位置之前,我遇到了此問題。