Сайт кеширования Nginx / Django, даже когда кеширование явно отключено - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над сайтом разработки, встроенным в Django на virtualenv на Nginx сервере с использованием uwsgi .

В конфигурационном файле uwsgi у меня есть:

py-autoreload = 1

Большую часть времени кэширование включается в settings.py :

CACHES = { 
    'default': {
       'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
       'LOCATION': '/var/www/example.com/cache',
    }   
}

, но когда яя работаю над сайтом, я заменяю строки BACKEND и LOCATION, приведенные выше:

CACHES = { 
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }   
}

У меня проблема в том, что Django или Nginx кэширует сайт , даже когда я отключаю кэширование и очищаю кеш.

Это очень странно - я могу на самом деле удалить основную папку приложения (не папку проекта) и сайт продолжает работать .

Я столкнулся с этим во время изменения шаблонов и обнаружил, что мои обновления не были отражены в содержимом сайта.

Я пробовал перезагружать опции в Safari, загружать в Chrome, окнах private / incognito и т. Д.

Единственное, что надежно работает, это перезапустить сервер.

Есть ли у Django, Nginx, uwsgi или virtualenv какая-то секретная система кеширования, о которой я не знаю?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Должно быть либо кэширование на стороне клиента, либо кэширование Nginx;)

(1) в первом случае браузер не запрашивает обновленный ресурс, потому что было сказано, что предыдущий ресурс все еще действителен;

Чтобы подтвердить это, попробуйте использовать Chrome в режиме инкогнито и посмотрите, что произойдет.

Если это так, я бы добавил декоратор never_cache к представлениям Django:

from django.views.decorators.cache import never_cache

class MyView(View):

    @never_cache
    def dispatch(self,request,*args,**kwargs):
        return super().dispatch(request,*args,**kwargs)

или, в функциональном представлении:

@never_cache
def myview(request, ...):
   ...

Используя декоратор never_cache, вы указываете браузеру не кэшировать страницу, поэтому, когда пользователь этого требует, браузер, в свою очередь, подключается к серверу.

(2) если нет, должен быть Nginx; проверьте все конфигурационные файлы nginx:

  • / и т.д. / Nginx / nginx.conf
  • / и т.д. / Nginx / сайты-доступные / *. Конф

и закомментируйте любой параметр, содержащий «cache», затем перезапустите службу.

Я бы также отключил "sendfile", как предложено здесь: https://jeremyfelt.com/2013/01/08/clear-nginx-cache-in-vagrant/

путем настройки файла /etc/nginx/nginx.conf следующим образом:

...
html {
    ...
    sendfile off;
    ...
0 голосов
/ 09 апреля 2019

Я думаю, что вы должны поделиться верхней частью своего взгляда для получения дополнительных разъяснений.

Но вы можете попробовать это:

return render(request, template, {'context':context})

...