我在 Django、Apache、WSGI、MySql 等方面经验丰富,并且在另一台运行 Lion 的 OS X 计算机上设置了此环境并可以正常工作。Django 会话后端是 db,会话中间件和应用程序都在设置中正确启用。在站点视图的第一次请求期间,我们设置了一个 request.session 键/值,这第一次通过它可以正常工作。在随后的视图中,当我们检查键/值是否存在时,我们得到一个服务器级别的 500 错误,即使在调试模式下,python 解释器也无法生成完整的堆栈跟踪异常。apache 日志生成以下消息...
[Mon Apr 16 14:26:22 2012] [notice] Apache/2.2.21 (Unix) DAV/2 mod_wsgi/3.3 Python/2.7.1 mod_ssl/2.2.21 OpenSSL/0.9.8r configured -- resuming normal operations
[Mon Apr 16 14:26:27 2012] [info] mod_wsgi (pid=2362): Create interpreter 'snap.joe|'.
[Mon Apr 16 14:26:27 2012] [info] [client 127.0.0.1] mod_wsgi (pid=2362, process='snap', application='snap.joe|'): Loading WSGI script '/var/www/venvs/snap_env/snap/wsgi/wsgi.py'.
[Mon Apr 16 14:26:32 2012] [error] [client 127.0.0.1] Premature end of script headers: wsgi.py
[Mon Apr 16 14:26:33 2012] [notice] child pid 2362 exit signal Bus error (10)
已检查 MySQL db 表 django_session 行是否与 session_data 正确添加,并且在第一次请求后在浏览器中设置的 cookie 包含正确/匹配的 session_id。如果我在现有会话代码之前添加一个简单的 request.session.flush() ,我们显然可以绕过错误,因为会话中从来没有任何东西。还有一件事,我们添加到会话键/值存储的值是一个 Django QuerySet 对象。同样,这是在一个实时的 CentOS 服务器上运行的,还有另一台 Mac OS X Lion 机器(尽管运行的是 Python 2.6 而不是 2.7)。
有什么想法吗?非常感谢!