У меня есть приложение Rails, которое остановило кэширование где-то на этом пути, и я не уверен, какая версия по пути могла бы остановить ее работу.Что может привести к тому, что кеширование страниц Rails перестанет работать?
У меня создалось впечатление, что при кешировании страниц при правильной работе никогда не нужно даже ударять Rails, если он находит кешированный файл. Однако, загружая мою страницу и контролируя production.log, она поражает как Rails, так и DB.
У меня есть подметальная машина, которая очищает кеш: create,: update и: destroy. Он отлично работает, так как файл /public/cache/index.html обновляется всякий раз, когда происходит одно из этих событий. Сначала я подумал, что это может быть из-за того, что я использовал плагин OutputCompression, но удаление имело тот же результат, поэтому я снова его вернул. Индекс.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, потому что он возвращает версию файла gzipped с настройкой Content-Type на «text/html». Любая идея, как заставить его отправлять правильный тип контента только для этого файла? Это единственное, что кэшировано во всем приложении.
EDIT СНОВА: Изменение .htaccess, чтобы это не помогло с проблемой GZIP:
RewriteRule ^/$ cache/index.html [QSA,T=application/x-gzip]
RewriteRule ^$ cache/index.html [QSA,T=application/x-gzip]
Он по-прежнему не показывается как текстовое представление почтового файла (т.е. тарабарском), если сжатие выключен. Кэширование работает отлично.
Вы видите файл index.html, который должен был быть создан? –
@fd: Да, как указано в третьем абзаце, он правильно создан в /public/cache/index.html. Если происходят события создания, обновления или уничтожения, этот файл стирается и заменяется вновь созданным, снова содержащим правильное содержимое. Когда я загружаю страницу, затем щелкните ссылку на тот же точный URL (база сайта), .htaccess должен использовать кешированную версию, но это не так. Я бы ожидал, что Ctrl + F5 заставит обновить (может быть), но это просто нажмите одну и ту же ссылку на главную страницу индекса дважды. –
Довольно странно, RewriteRules выглядят убедительно для меня. Поэтому я по умолчанию рассматривал свои предположения. Правильно ли выбран .htaccess? Установлен и работает mod_rewrite? и т. д. Ofc, я бы ожидал, что ответы будут да, так как вы как-то попадаете в Rails, но я обычно вижу что-то интересное, бросая вызов тому, что, как я думаю, я знаю, что это правда о неисправной системе. –