我为用户身份验证创建了一个简单的django应用程序,然后我想在带有gunicorn的nginx上进行部署。我使用2个字段创建自定义用户模型:用户名,密码。我已使用以下方法进行了测试:
python manange.py runserver 0.0.0.0:8000
运行良好!但是当我尝试使用gunicorn在nginx上部署时,我得到了500个内部服务器错误。我用gunicorn测试django的命令是:
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列来自哪里?然后,当我用gunicorn和没有gunicorn运行django应用程序时,我检查了我的日志并发现了一些奇怪的东西。
在没有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时我犯了什么错误吗?
答案 0 :(得分:0)
经过一整天的调试后,发现我的身份验证应用程序的名称(即auth)与django默认身份验证冲突。不知何故,当我通过gunicorn服务我的应用程序时,它使用django默认的auth应用程序而不是我的。如果仔细查看日志,它会查询django的默认用户模型。
要解决此问题,请转到我的应用设置并删除django.contrib.auth.middleware! :)