2011-06-15 21 views
5

tengo el siguiente controlador que devuelve una lista de etiquetas cuando se recibe una solicitud HTTP a/etiquetasresultado JSON en 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 

estoy notando que cada vez que se hace una petición a/etiquetas, Rails está generando un archivo de caché en /public/tags.json. Sin embargo, nunca parece usar este archivo de caché. En su lugar, siempre se ejecuta la consulta SQL para recuperar las etiquetas:

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) 

¿Por qué no se raíles usando el archivo de caché que se está generando? ¿Es porque la solicitud es para/tags y no /tags.json?

Respuesta

2

pienso que usted es probablemente correcta, puede especificar la opción :cache_path a decirle qué nombre al archivo que hacer

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

también puede pasar un proc, si desea incluir params

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

o cualquier otra cosa

+0

Hmm, lo he intentado y todavía está exhibiendo el mismo comportamiento (ahorro de /public/tags.json). –

+2

y la forma en que funciona el caché de páginas solo genera páginas estáticas, en público, que son tomadas por el servidor web sin tocar los rieles. Entonces debes marchitarse para obtener los rieles y guardarlos con un nombre diferente, o conseguir que tu servidor web (Apache o lo que sea) tenga un alias para ese archivo. O haga que el cliente solicite la página con extensión. Al menos creo que algo así debería funcionar – loosecannon

+0

si solo responde en json, saca el bloque responder_, eso es lo que está añadiendo el .json posiblemente – loosecannon

0

Su directorio de caché puede estar en el lugar equivocado. Tuve este problema antes cuando intentaba colocar el caché en un directorio que no era público.

Cuestiones relacionadas