uWSGI进程丢失Django会话

时间:2013-07-18 14:00:22

标签: python django nginx uwsgi

我只是浪费了几个小时没有真正的解决方案,这就是问题所在: 我立即登录Django管理员,或者在点击几下后我就被抛弃了。

我在所有的设置和配置中找了一会儿。到目前为止唯一的线索来自uwsgi日志文件,例如:

www.example.com [pid: 20047|app: 0|req: 1120/2060] 217.9.101.34 () {42 vars in 841 bytes} [Thu Jul 18 15:27:35 2013] GET /admin/ => ...
www.example.com [pid: 20047|app: 0|req: 1122/2063] 217.9.101.34 () {40 vars in 786 bytes} [Thu Jul 18 15:27:37 2013] GET /admin/auth/ => ...
www.example.com [pid: 20047|app: 0|req: 1124/2066] 217.9.101.34 () {40 vars in 801 bytes} [Thu Jul 18 15:27:39 2013] GET /admin/auth/user/ => ...
www.example.com [pid: 20047|app: 0|req: 1125/2067] 217.9.101.34 () {40 vars in 740 bytes} [Thu Jul 18 15:27:39 2013] GET /admin/jsi18n/ => ...
www.example.com [pid: 19082|app: 0|req: 947/2072] 217.9.101.34 () {42 vars in 841 bytes} [Thu Jul 18 15:27:41 2013] GET /admin/ => ...
www.example.com [pid: 20047|app: 0|req: 1128/2081] 217.9.101.34 () {42 vars in 841 bytes} [Thu Jul 18 15:27:44 2013] GET /admin/auth/

前几个请求具有相同的进程ID,这就是我登录的位置。然后另一个进程接受我的下一个请求,显然这个进程不知道我的会话并且我已经注销了。下一个请求再次具有原始ID,但我的cookie已经重置。

我已经尝试了一切:再次设置项目,再次设置uwsgi配置,检查nginx,重新启动所有内容,但没有任何帮助。它也可能不是cookie错误,因为它出现在几台计算机上的几个浏览器上。毕竟,cookie已设置,会话将记录到数据库中。

Stack是Django 1.5.1,Python 2.7,virtualenv,buildout,MySQL 5.5,nginx,uwsgi,Ubuntu 12.04

有什么想法吗?

编辑:

这是uwsgi配置:

[uwsgi]
#vhost = true  # tried to see if that helps
plugins = python
socket = /tmp/example.com.sock
master = true
enable-threads = true
processes = 8
cheaper = 2
max-requests=1000
reload-on-rss=110
vacuum=True
harakiri=20
buffer-size=16384  # added to try if that helps
wsgi-file = /var/www/blabla/.../django.wsgi
virtualenv = /var/www/blabla
chdir = /var/www/blabla/...
touch-reload = /var/www/blabla/.../django.wsgi

2 个答案:

答案 0 :(得分:2)

你检查过你的SESSION_ENGINE吗?例如,如果您将其设置为使用django缓存并将其设置为locmem://您将遇到此类问题

另一个(可能即使很难发生)问题(如果你处于--lazy / - lazy-apps模式)可能是一个带有旧代码副本的进程,你试过重新加载整个实例吗? / p>

答案 1 :(得分:2)

默认情况下,django会在数据库中存储会话,因此您的问题很可能是由于此错误:https://code.djangoproject.com/ticket/20537

考虑更新为uwsgi> = 1.2.6