2011-06-15 63 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

您的缓存目录可能位于错误的地方。在尝试将缓存放置在公共目录以外的位置之前,我遇到了此问题。