0

我在 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)。

有什么想法吗?非常感谢!

4

2 回答 2

0

一些想法:

1)您是否运行相同版本的模块?Django 最近刚刚更新(1.4),所以如果您进行了 pip 安装并且没有指定版本,您的生产可能有一个旧版本,而您的开发有新版本。

2) 你可以只使用 manage.py 运行服务器来测试吗?我怀疑这与 apache 配置有关(因此,如果它在 runserver 中运行良好,则意味着问题出在 apache 上)。

于 2012-04-16T19:00:10.687 回答
0

请参阅记录在案的原因:

http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions#Apache_Process_Crashes

并点击更多链接以获取可能的解决方法。

简而言之,可能是共享库版本冲突,同时使用 mod_python,或者 Python 的扩展模块不适用于子解释器。

如果这只是该 Apache 上的 Python 站点,请设置:

WSGIApplicationGroup %{GLOBAL}

一种潜在的快速解决方案。

于 2012-04-16T20:25:56.820 回答