Cache de documentos no .html en Rails
Publicado por Edgar González 2 Enero 2007 en Rails, Ruby.En rails hacer cache de páginas, acciones y fragmentos es sencillo.
Rails crea el cache de las páginas en el file system agregándole (por defecto) la extensión .html, por eso es la razón de ser de las reglas de rewrite en el public/.htaccess:
-
RewriteRule ^([^.]+)$ $1.html [QSA]
-
RewriteCond %{REQUEST_FILENAME} !-f
-
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
y en el lighttpd.conf (si usas lighttpd):
-
url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
Esto lo que hace es instruir al web server a buscar el archivo en el file system, con lo cual el web server sirve este documento con el mime-type text/html, la desventaja de esto es que hacer cache de documentos que no sean html (como xml y js) no es obvio.
Recientemente en RubyCorner y to2blogs he probado con dos enfoques:
1. Por ejemplo para el badge JavaScript que muestra los últimos actualizados, estoy haciendo cache, modificando el routes.rb:
-
map.connect 'badge/:action/:token',
-
:controller => 'badge',
-
:requirements => { :token => /^\w+\.js$/ }
con lo cual indico que el url debe terminar en .js, de esta forma el archivo de cache generado en el file system tiene la extensión .js, con lo cual el web server lo sirve con el mime-type apropiado (text/javascript).
Luego en el controller simplemente remuevo el .js para obtener el token, y procesar apropiadamente:
-
token = token[0..-4]
2. El otro enfoque que conseguí es basarme en lighttpd para poder hacer cache de los feeds, simplemente lo que hago es instruir a lighttpd para que dinámicamente asigne el mime-type basado en el path del url (/feeds/*) sin importar que los archivos tengan la extensión .html en el file system. Agregándole lo siguiente al archivo lighttpd.conf:
-
$HTTP["url"] =~ "^/feeds/" {
-
mimetype.assign = ( "" => "application/xml" )
-
}
Me imagino que con Apache debe existir una forma de hacer lo mismo.
¿Conoces otra forma de hacer cache de documentos no .html en rails?
posible solución
http://www.plexusweb.com/staff/adam/blog/post/94-Rails-Caching-non-HTML-Files