Llevo algunos días viendo cosillas básicas de la caché de Rails. En concreto, he estado intentando cachear el resultado de una acción solicitada por Ajax cuyo resultado es renderizado por un archivo rjs. Y no ha habido manera. Hasta que recordando los tiempos en los que el 90% de mi tiempo lo dedicaba a depurar código Java sobre la plataforma Banksphere (todos tenemos un pasado oscuro) me metí un poquito en el código y llegué a caching.rb.
private
def caching_allowed
request.get? && response.headers['Status'].to_i == 200
end
Así que, por defecto, si una petición no se hace por GET no se cachea. Y las peticiones Ajax son POST de tó la vida.
Confiando un poquito más en el programador podemos cambiar la condición de cacheo por
(request.get? || request.xhr?) && response.headers['Status'].to_i == 200
de forma que las peticiones Ajax, aún no siendo GET puedan cachearse.
Otro funcionamiento que no me convence es que el archivo cacheado se genera siempre y con extensión HTML. Entiendo que, una vez enganchado el resultado del cacheo (esto se podrá decir en castellano de algún modo mejor, no?) el hecho de que se genere siempre el archivo será irrelevante, pero se puede escribir una condición extra al método cache_page para que si el archivo existe no lo escriba:
return if File.exists?(page_cache_path(path))
Respecto a que el archivo cacheado tenga extensión HTML creo recordar que se puede solucionar en la configuración de Apache, indicándole que el contenido de ciertos directorios se sirva como javascript, pero esto tengo que verlo.
Salud y rocanrol!
Mostrando las entradas con la etiqueta rjs. Mostrar todas las entradas
Mostrando las entradas con la etiqueta rjs. Mostrar todas las entradas
martes, 6 de mayo de 2008
Suscribirse a:
Entradas (Atom)