Если вы используете статическое кэширование страниц в rails и работаете через apache, достаточно использовать явное расширение xml для URL.
если вы работаете только с xml и не используете html, при поиске кешированных файлов вы также можете изменить для apache conf значение по умолчанию xml вместо html.
срок действия кэша - довольно скучная вещь для кодирования и тестирования, но, поскольку вы редко регенерируете файлы, вы можете просто удалить весь кэш.
Вот урезанный выбор файлов и выдержки из того, как я обрабатываю кеш на небольшом, редко обновляемом сайте rails:
В контроллерах, которые вы хотите кэшировать
class XmlThingController < ApplicationController
caches_page :index, :show, :other_actions
В контроллерах / действиях, которые изменяют данные, которые могут вызвать изменения в xmls:
class Admin::SomeCrudController < AppplicationController
cache_sweeper :stupid_master_sweeper, :only => [ :save, :destroy ]
В 'config / средах / production.rb'
config.action_controller.page_cache_directory =
File.join(RAILS_ROOT, 'public', 'cache')
Где-то в вашем 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]
Тупой уборщик, который очищает весь кеш каждый раз, когда он запускается:
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
Если вы предпочитаете по умолчанию подразумеваемое расширение по умолчанию для xml, измените расширение в правиле индекса 1.4.2 и выполните следующее:
# 1.4.4. with html extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.html -f
RewriteRule ^(.*)$ /cache$1.html [L]
до:
# 1.4.4. with xml extension implied
RewriteCond %{DOCUMENT_ROOT}/cache%{REQUEST_URI}.xml -f
RewriteRule ^(.*)$ /cache$1.xml [L]