Wenn Sie Schienen statische Seiten-Caching und dazu dient, durch Apache verwendet wird, nur auf die Urls eine explizite XML-Erweiterung verwenden würde es tun.
wenn Sie nur xml dienen und keine HTML Sie könnten auch die Apache conf bearbeiten, um XML statt HTML auf Standard, wenn für Cache-Dateien suchen.
Cache Ablauf ist eine ziemlich langweilige Sache zu Code und Test, aber da Sie selten die Dateien zu regenerieren, können Sie nur den gesamten Cache ablaufen.
Hier ist eine getrimmte Auswahl von Dateien und Auszügen aus wie ich Cache in einer kleinen, nur selten aktualisiert Schienen Website handhaben:
In dem Controllern Sie
class XmlThingController < ApplicationController
caches_page :index, :show, :other_actions
In den Controllern gecached werden sollen/Aktionen, die Daten ändern, die Änderungen an den xmls verursachen würden:
In '
config/Umgebungen/production.rb‘
config.action_controller.page_cache_directory =
File.join(RAILS_ROOT, 'public', 'cache')
Somehere in Ihrem vhost Apache conf:
# 1.4. Handle caching
# 1.4.1. prevent direct cache access
RewriteRule ^/cache - [F,L]
# 1.4.2. for index
RewriteCond %{DOCUMENT_ROOT}/cache/index.html -f
RewriteRule ^/?$ /cache/index.html [L]
# 1.4.3. for explicitly specified extensions
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI} -f
RewriteRule ^(.*)$ /cache$1 [L]
# 1.4.4. with html extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /cache$1.html [L]
# 1.5. Finally, proxy everything else to mongrel
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://your-website-proxy%{REQUEST_URI} [P,QSA,L]
Die stummen Kehrmaschine, dass jedes Mal, wenn es ausgelöst, dass ganze Cache reinigt:
class StupidMasterSweeper < ActiveRecord::Observer
observe Foo, Bar # All models that affect caching here
def after_save(record); end
def after_destroy(record); end
def filter(controller)
# sweep everything.
`cd #{RAILS_ROOT} && RAILS_ENV=#{ENV['RAILS_ENV']} rake cache:clear`
end
end
lib/tasks/cache.rake
namespace :cache do
desc "Remove all cached files"
task :clear do
puts `rm -rf #{RAILS_ROOT}/public/cache/*`
end
end
Wenn Sie es vorziehen, die Standard implizierten Erweiterung xml auf Standard, auf dem 1.4 die Erweiterung ändern.2 Index-Regel und die folgende:
# 1.4.4. with html extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /cache$1.html [L]
zu:
# 1.4.4. with xml extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.xml -f
RewriteRule ^(.*)$ /cache$1.xml [L]
... sobald ich spiele dony mit Cornify. – kch
Interessante Lösung. Sound einfach genug. Was ist mit "rails 'static page caching" gemeint, dass ein Juwel oder etwas? Oder ist das in Rails eingebaut? –
Es ist eingebaut, siehe caches_page in der aktualisierten Antwort. – kch