使用gunicorn和nginx部署django时出现500内部服务器错误

时间:2016-06-25 11:39:29

标签: python django nginx gunicorn

我为用户身份验证创建了一个简单的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时我犯了什么错误吗?

1 个答案:

答案 0 :(得分:0)

经过一整天的调试后,发现我的身份验证应用程序的名称(即auth)与django默认身份验证冲突。不知何故,当我通过gunicorn服务我的应用程序时,它使用django默认的auth应用程序而不是我的。如果仔细查看日志,它会查询django的默认用户模型。

要解决此问题,请转到我的应用设置并删除django.contrib.auth.middleware! :)

相关问题