Найти - Пользователи
Полная версия: nginx + uwsgi + django проблемы в паботе
Начало » Web » nginx + uwsgi + django проблемы в паботе
1
mks
Добрый день.
Запустил вышеперечисленную связку под ubuntu 12.04. nginx и uwsgi из репозиториев ОС, django в virtualenv. Всё вроде бы работает, но иногда бывают странности. Например:
При входе в админку иногда с первого раза вход не происходит, вместо этого redirect на страницу входа, но при этом кука устанавливается и если ещё раз зайти на страницу то попадаю в админ панель (пароль второй раз не требует). Вторая странность: меняю в админке first_name и last_name у пользователя, нажимаю кнопку сохранить и в общем списке пользователей вижу старое имя, хотя если посмотреть в БД то там имя изменилось. Как будто где то кеширование происходит или где то что то не успевает отработать и берётся старое значение. Пробовал на ubuntu 12.10 и 13.04, поведение аналогичное. При запуске из под apache и mod_wsgi ничего подобного не наблюдаю. Братцы подскажите куда копать, ничего конструктивного в голову не приходит.
Конфигурационные файлы:
uwsgi:
[uwsgi]
socket = 127.0.0.1:3031
virtualenv = /home/mks/projects/python/web/cusystem/ve
chdir = /home/mks/projects/python/web/cusystem
processes = 2
threads = 2
module = cusystem.wsgi:application
gid = mks
uid = mks
nginx:
server {
listen 80;
root /home/mks/projects/python/web/cusystem/server_media;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
location /media {
try_files $uri =404;
}
location /static {
try_files $uri =404;
}
location /media/files {
internal;
}
}
o7412369815963
> нажимаю кнопку сохранить и в общем списке пользователей вижу старое имя, хотя если посмотреть в БД то там имя изменилось. Как будто где то кеширование происходит или где то что то не успевает отработать и берётся старое значение.

1) проверка кеша: из браузера запрос уходит? на сервере этот запрос отрабатывается?
2) я так понял что после записи в БД сразу формируется ответ для клиента, возможно что сохраненные данные ещё не разместились в таблице (БД какая?) и тут же идет запрос на получение данных например через 2-й коннект, посмотрите что прилетает из базы - если старое значение то нужно при записи ждать завершения операции, в mongodb это параметр w=1 (w>0). Либо учитывать что произошло изменение и формировать страницу с учетом изменений. Так же тут может быть кеш-прослойка между БД и приложением, при этом кеш нужно сбрасывать (точечно).
mks
o7412369815963, спасибо за отклик.
1) Из браузера уходит post запрос на адрес /admin/auth/user/2/ с правильным новым именем, приходит ответ с редиректом (код 302) и происходит get запрос страницы /admin/auth/user/ где в списке вижу старое имя. В журналах доступа nginx и uwsgi эти запросы есть.
2) БД - mysql. В django кеш отключен. Как посмотреть то что прилетает из БД, django debug toolbar?
Попробовал, пообновлять страницу редактирования пользователя, обнаружил новую странность: несколько раз появлялось то старое то новое имя. При этом uwsgi в журнал писал по очереди:
(HTTP/1.1 200) 6 headers in 307 bytes (1 switches on core 1)
либо:
(HTTP/1.1 200) 6 headers in 307 bytes (1 switches on core 0)
Возможно проблемы связаны с переключением этих самых ядер? Весь код участвующий в эксперименте это код приложения admin и auth из состава django. Вы предлагаете вносить в него изменения?
o7412369815963
> несколько раз появлялось то старое то новое имя.
Это признаки кеширования (точнее баг, который кеширует), осталось выяснить - где.

Есть (грубо говоря) такая цепочка: mysql -> orm -> шаблоны -> django-core -> uwsgi -> ngnix -> browser -> display.
нужно посмотреть что передает одно звену другому, таким образом узнаем кто виноват.

Попробуйте другой браузер или curl - простой способ отсечь 2 звена справа если ошибка повторяется.
o7412369815963
> Как посмотреть то что прилетает из БД… / … Вы предлагаете вносить в него изменения?
Можно попробовать папку джанги локально положить и поправить, или топорно подменить классы.
mks
Вообщем к сожалению пока нет возможности подробно разбираться что к чему, интуитивно кажется что это uwsgi что то химичит. Пока запустил django как FastCGI процесс, всё работает стабильно. Потом, если разберусь с проблемой расскажу в чём было дело.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB