Как отключить кэширование страниц Django / mod WSGI
У меня есть Django работает в Apache через mod_wsgi. Я считаю, что Django кэширует мои страницы на стороне сервера, что приводит к неправильной работе некоторых функций.
У меня есть таймер обратного отсчета, который работает, получая текущее время сервера, определяя оставшееся время обратного отсчета и выводя это число в шаблон HTML. Таймер обратного отсчета javascript затем берет на себя и запускает обратный отсчет для пользователя.
проблема возникает, когда пользователь обновляет страницы или переходе на другую страницу с таймером обратного отсчета. Таймер, по-видимому, прыгает в разное время спорадически, обычно возвращаясь к одному и тому же времени снова и снова при каждом обновлении.
используя HTTPFox, страница не загружается из моего кэша браузера, поэтому похоже, что либо Django, либо Apache кэширует страницу. Есть ли способ отключить эту функцию? У меня не будет достаточно трафика, Чтобы беспокоиться о кэшировании вывода скрипта. Или я совершенно неправильно, почему это происходит?
[Edit] из сообщений ниже, похоже, кэширование отключено в Django, что означает, что это должно происходить в другом месте, возможно, в Apache?
[Edit] у меня есть более подробное описание того, что происходит: для первых 7 (или около того) запросов, сделанных на сервер, страницы визуализируются скриптом и возвращаются, хотя каждая из этих 7 страниц, кажется, кэшируется, как она появляется позже. По 8-му запросу сервер обслуживает первая страница. По 9-й просьбе он обслуживает вторую страницу, и так далее в цикле. Это длится до перезапуска apache, когда процесс начинается снова.
[Edit] я настроил mod_wsgi для запуска только одного процесса за раз, что заставляет таймер сбрасывать одно и то же значение в каждом случае. Интересно, что на моей странице есть еще один компонент, который отображает случайное изображение по каждому запросу, используя order ('?'), и это каждый раз обновляется разными изображениями, которые указывает, что кэширование происходит в Django, а не в Apache.
[Edit] в свете предыдущего редактирования я вернулся и рассмотрел соответствующий views.py файл, обнаружив, что переменная начала обратного отсчета устанавливается глобально в модуле, вне функций представления. Перемещение этой настройки внутри функций представления разрешило проблему. Таким образом, это оказалось не проблемой кэширования в конце концов. Спасибо всем за помощь.
4 ответов
из моего опыта работы с mod_wsgi в Apache маловероятно, что они вызывают кэширование. Несколько вещей, чтобы попробовать:
- возможно, что у вас есть какой-нибудь прокси-сервера между вашим компьютером и веб-сервером, который является надлежащим или ненадлежащим кэшированием страниц. Иногда интернет-провайдеры запускают прокси-серверы для уменьшения пропускной способности вне своей сети. Можете ли вы предоставить заголовки HTTP для страницы, которая кэшируется (Firebug может дать их к вам). Заголовки, которые меня особенно интересуют, включают Cache-Control, Expires, Last-Modified и ETag.
- можете ли вы опубликовать свои MIDDLEWARE_CLASSES из своего settings.py файл. Возможно, у вас есть промежуточное ПО, которое выполняет кэширование для вас.
- можете ли вы grep свой код для следующих элементов "загрузить кэш", " django.ядро.кэш", и "cache_page". A * grep-R "поиск" * * будет работать.
- делает settings.py (или что-нибудь, что он импортирует, как " из импорт localsettings*") включает CACHE_BACKEND?
- что происходит при перезапуске apache? (например, перезапуск apache служб sudo). Если перезапуск устраняет проблему, то это может быть Apache, выполняющий кэширование (возможно, это также может очистить бэкэнд кэша locmen Django)
Я только что наткнулся на это:
поддержка автоматической перезагрузки, чтобы помочь инструментам развертывания вы можете активируйте поддержку автоматической перезагрузки. Когда что-то меняется этот.файл wsgi, mod_wsgi перезагрузит все демонические процессы для нас.
для этого просто добавьте следующую директиву в свой раздел каталога:
WSGIScriptReloading On
вы специально настроили кэширование Django? Из документов кажется, что вы четко знаете, было ли Django кэширование, поскольку оно требует работы заранее, чтобы заставить его работать. В частности, необходимо определить, где хранятся кэшированные файлы.
используете ли вы многопроцессорную конфигурацию для Apache / mod_wsgi? Если это так, это объяснит, почему разные ответы могут иметь разное значение для таймера, так как вероятность того, что при инициализации таймера будет отличаться для каждого процесса обработки запросов. Поэтому он может прыгать.
прочти:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
в каком режиме или конфигурации вы работаете Apache / mod_wsgi и, возможно, опубликовать, что это за конфигурация. Без знания слишком много неизвестного.