Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 30
×

Непонятный глюк с кешем (django/nginx/mysql)

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Уже неделю или две на Джинне завелся баг, который сводит меня с ума.

Показывается «устаревшее» состояние страницы. Изменяшь данные, POST, редирект — видим старые данные. Рефреш — новые. Рефреш — снова старые. И так несколько раз. Глючат не только «мои» страницы, но и django-admin.

Кеши в приложении я не использую. Недавно обновил Django до 1.5, грешу на это. Или на изменения настроек nginx/mysql — хотя их вроде бы никто не менял.

Не могу сообразить как хотя бы *найти* где затык.

MySQL 5.5, Nginx 1.1.19, Django 1.5. Ubuntu 12.04.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Да, версии программ в Убунте иногда сильно отстают — сам однажды зарепортил баг, который оказался давно пофикшенным но лишь не подтянутым в Убунту.
Кстати, 12.04 — древность. У меня на проекте за минувший год сменилось уже 3 убунты, и начинали мы с 12.10.

Кажется нашел, дело в древнем UWSGI: twitter.com/...924659666362368

Ubuntu 12.04 использует uwsgi 1.0, хотя последняя версия 1.9.

магический запрос: google «django weird caching bug 1.5»

i.imgur.com/TF3Yy2H.png

app server отдает две разные версии по очереди: новая (8216 байт) и старая (8044 байт).

даже спустя несколько минут проскакивает «старая» версия страницы: i.imgur.com/7QFuD10.png

Локально не воспроизводится, т.ч. я грешу на связку django-uwsgi-nginx. У nginx никакие proxy/cache настройки не используются. У uwsgi кеша вроде как вообще не предусмотрено. Wtf.

$ grep cache /etc/nginx/sites-enabled/*
(empty)

у вюшці:

<code>
logger.info('I am called')
if 'old content ' in response:
    import pdb;pdb.set_trace()
return response
</code>
і все стане на свої місця :)

У нас есть похожая штука с apache-wsgi-django
После изменения кода надо передернуть апач (httpd reload), так как иначе он имея много instance скомпилированного сайта не все сразу обновляет до последнего кода.
Хотя за 2 недели должно было бы все обновиться....

Зависит от браузера? ОС? Браузер в «стерильных условиях» также себя везет? Плагины, ActiveX и прочие примочки?

MySQL один сервер или Master-Slave репликация?

Такие проблемы наверное рационально анализировать добавлением и последующим анализом логов. Добавить дамп ответа в контроллер, и потом будет видно, был ли вообще он вызван, и получил ли контроллер от ОРМ закешированные данные.

Підписатись на коментарі