我对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)
在第一个请求包含正确/匹配的session_id之后,检查了MySQL数据库表django_session行是否正确添加了session_data以及浏览器中设置的cookie。如果我在现有会话代码之前添加一个简单的request.session.flush(),我们可以明显地绕过错误,因为会话中没有任何内容。还有一件事,我们添加到会话键/值存储的值是Django QuerySet对象。同样,这是在一个现场CentOS服务器,以及另一台Mac OS X Lion机器上运行(尽管运行Python 2.6而不是2.7)。
任何想法的人?非常感谢!
答案 0 :(得分:0)
一些想法:
1)您运行相同版本的模块吗? Django刚刚更新(1.4),所以如果你做了一个pip安装并没有指定一个版本,你的产品可能有一个旧版本,而你的开发有更新版本。
2)您可以仅使用manage.py runserver进行测试吗?我的怀疑是它与apache配置有关(所以如果它在runserver中工作正常,那就意味着问题是apache)。
答案 1 :(得分:0)
请参阅记录在案的原因:
http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions#Apache_Process_Crashes
并按照可能的解决方法进一步链接。
简而言之,可能是共享库版本冲突,同时使用mod_python,或者Python的扩展模块不能与子解释器一起使用。
如果这只是该Apache上的Python站点,请设置:
WSGIApplicationGroup %{GLOBAL}
一个潜在的快速解决方案。