Я создал простое приложение django для аутентификации пользователей, а затем хочу развернуть его на nginx с помощью gunicorn. Я создаю свою пользовательскую модель с двумя полями: имя пользователя, пароль. Я тестировал, используя:

python manange.py runserver 0.0.0.0:8000

Работает нормально! Но когда я пытаюсь развернуть nginx с помощью Gunicorn, у меня возникает внутренняя ошибка сервера 500. Команда, которую я использовал для тестирования django с помощью Gunicorn, такова:

gunicorn --bind 127.0.0.1:8080 backend.wsgi:application

Бэкэнд - это мой startapp. Вот моя конфигурация nginx:

server {
    listen 8000;
    server_name localhost;
    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8080;
    }
}

Когда я вхожу в систему с клиентского сайта, он отправляет на сервер почтовый запрос с учетными данными пользователя. На стороне сервера он успешно получает запрос с правильными учетными данными, но когда он пытается аутентифицировать пользователя, запрашивая таблицу User:

User.objects.get(username=username, password=password)

Возникает исключение:

(1054, "Unknown column 'auth_user.last_login' in 'field list'")

Эммм странно !!!! Откуда берется столбец last_login? Затем я проверил свой журнал и обнаружил что-то странное, когда я запускаю приложение django с Gunicorn и без Gunicorn.

При работе без nginx и gunicorn вот журнал запросов к таблице User:

2016-06-25 10:38:11,815|DEBUG|(0.001) SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`password`, `auth_user`.`role` FROM `auth_user` LIMIT 21; args=()

При работе с nginx и gunicorn:

2016-06-25 10:33:57,983|DEBUG|(0.000) SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined` FROM `auth_user` LIMIT 21; args=()

Похоже, что при работе с nginx и gunicorn мои пользовательские модели не используются. Кто-нибудь знает об этой проблеме? Я сделал какую-нибудь ошибку при настройке nginx и gunicorn?

3
OhMyGosh 25 Июн 2016 в 14:39
Поскольку вы опубликовали только свою конфигурацию nginx, а не конфигурацию Gunicorn, трудно сказать
 – 
e4c5
27 Июн 2016 в 03:18

1 ответ

Лучший ответ

После целого дня отладки выясняется, что имя моего приложения аутентификации (а именно auth) конфликтует с auth по умолчанию django. Каким-то образом, когда я обслуживаю свое приложение через gunicorn, оно использовало приложение аутентификации по умолчанию django вместо моего. Если вы внимательно посмотрите журнал, он запрашивает пользовательскую модель django по умолчанию.

Чтобы решить эту проблему, я захожу в настройки своего приложения и удаляю django.contrib.auth.middleware! :)

2
OhMyGosh 13 Авг 2016 в 05:22
Я столкнулся с той же проблемой. не могли бы вы взглянуть на этот stackoverflow. com/questions/72670754/…
 – 
wizard
18 Июн 2022 в 21:49