У меня есть приложение Rails, которое остановило кэширование где-то по пути, и я не уверен, какая ревизия по пути могла бы остановить его работу.
У меня сложилось впечатление, что при правильной работе кэширование страниц никогда не должно попадать в Rails, если он находит кэшированный файл. Однако при загрузке моей страницы и мониторинге production.log он попадает как в Rails, так и в DB.
У меня настроена подметальная машина, которая очищает кэш: create,: update и: destroy. Он работает нормально, так как файл /public/cache/index.html обновляется всякий раз, когда происходит одно из этих событий. Сначала я подумал, что это может быть из-за того, что я использовал плагин OutputCompression, но удаление, которое имело тот же результат, поэтому я его снова вставил. Index.html есть, но .htaccess и Rails игнорируют его и перестраивают всю страницу включая переписывание кэшированного index.html.
Вот соответствующие части кода (если я что-то упустил):
Контроллер:
class SecretsController < ApplicationController
caches_page :index
cache_sweeper :secret_sweeper, :only => [:create, :update, :destroy]
# snipped
end
.htaccess:
RewriteEngine On
# Rewrite index to check for cached
RewriteRule ^/$ /cache/index.html [QSA]
RewriteRule ^$ /cache/index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
Заголовки ответа Firebug
Date: Tue, 02 Jun 2009 18:50:36 GMT
Server: Apache/1.3.41 (Unix) mod_fastcgi/2.4.2 PHP/5.2.9 mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8b
Vary: Accept-Encoding
X-Runtime: 0.05637
Etag: "4f3497a74141d1e92ae7a1fe4d5dc1d2"
Cache-Control: private, max-age=0, must-revalidate
Content-Encoding: gzip
Content-Length: 22356
Connection: close
Content-Type: text/html; charset=utf-8
default-style: tms
Я бы хотел иметь возможность использовать mod_gzip, но ASmallOrange не поддерживает его, в то время как DreamHost (до того, как они утроили мою цену).
В любом случае, кто-нибудь может пролить свет на то, почему Rails игнорирует кэшированный index.html? Я предполагаю, что это что-то в .htaccess, так как он никогда не должен касаться Rails, если он работает правильно.
EDIT : проблема с кэшированием оказалась первой косой чертой в RewriteRules. Кэшированный файл не находился, пока я не изменил их оба на «cache / index.html», и теперь кеширование работает отлично.
Однако теперь мне нужно удалить вызовы OutputCompression, потому что он возвращает версию файла в сжатом формате с Content-Type, установленным в «text / html». Есть идеи, как заставить его отправлять правильный тип контента только для этого файла? Это единственный кеш во всем приложении.
ВНОВЬ РЕДАКТИРОВАТЬ : Изменение .htaccess на это не помогло с проблемой gzip:
RewriteRule ^/$ cache/index.html [QSA,T=application/x-gzip]
RewriteRule ^$ cache/index.html [QSA,T=application/x-gzip]
Он по-прежнему отображается как текстовое представление файла zip (т. Е. Gibberish), если сжатие не отключено. Кэширование работает отлично, хотя.