2013-07-18 52 views
2

我只是浪费了几个小时没有一个真正的解决方案,这里是问题: 我登录到Django管理员,并立即或几次点击后,我被抛出。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 config,检查nginx,重启所有内容,但没有任何帮助。它也可以不是cookie错误,因为它出现在几台计算机上的多个浏览器上。毕竟,cookie被设置并且会话被记录到数据库中。

栈Django的1.5.1,Python 2.7版,virtualenv中,扩建中,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 
+0

使用gunicorn。最好的事情是。 –

+0

你在Django应用中做了什么特别的认证或中间件,或者只是标准的东西? –

+0

@DanielRoseman只是标准的东西,它也为我工作了几天,而其他用户抱怨,现在当测试我经常得到这个错误... – webjunkie

回答

2

你检查你的SESSION_ENGINE?例如,如果您将它设置为使用django缓存并将其设置为locmem://您会遇到这种问题

另一个(即使很难发生)问题(如果您处于--lazy/- -lazy-apps模式)可能是一个包含代码旧副本的进程,您是否尝试重新加载整个实例?

+0

我没有改变默认的SESSION_ENGINE。我也尝试着开启和关闭懒惰模式,看看它是否有所作为,但事实并非如此。我也停止了所有的uwsgi进程并且多次启动它们。 – webjunkie

+0

每个logline之前的主机名有点可疑:你是否处于virtualhosting模式?如果是的话,是否可以按需加载应用程序?如果是的话,你确定你所有的模块都是多口译友好的吗? – roberto

+0

您的需求是什么意思?我只需放置uwsgi配置,然后执行service uwsgi start。 – webjunkie