0

我正在尝试让 Facebook 登录与 Django 一起使用。我尝试了 Django-allauth 和 python-social-auth。两者都适用于开发服务器,但不适用于 mod_wsgi。

我得到一个 Apache2 500 错误页面。

在 de 日志中,我有如下错误:

[Sat Sep 21 15:30:06 2013] [notice] child pid 27293 exit signal Segmentation fault (11)

[Sat Sep 21 15:30:04 2013] [error] [client 12.23.34.45] Premature end of script headers: wsgi.py
[Sat Sep 21 15:30:04 2013] [error] [client 12.23.34.45] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

当我删除 python-openid 模块时,一切正常(我得到 Django 500 错误页面,说这个模块丢失,但 wsgi 中没有段错误)

我在我的 httpd.conf 中使用这些 wsgi 说明:

WSGIDaemonProcess info user=info group=info threads=25
WSGIProcessGroup info

在同一台服务器上,我在生产中还有许多其他 Django 站点,都没有问题(每个站点都使用 virtualenv)。

我将 loglevel 设置为调试,这给了我这些额外的消息:

[Sat Sep 21 15:59:19 2013] [debug] core.c(3126): [client 12.23.34.45] redirected from r->uri = /admin/
[Sat Sep 21 15:59:20 2013] [info] mod_wsgi (pid=28475): Attach interpreter ''.
[Sat Sep 21 15:59:20 2013] [info] mod_wsgi (pid=28475): Create interpreter 'www.mydomein.nl|'.
[Sat Sep 21 15:59:20 2013] [info] [client 12.23.34.45] mod_wsgi (pid=28475, process='info', application='mydomain.nl|'): Loading WSGI script '/home/info/wsgi.py'.

(感谢编辑)

按照建议,我将 httpd.conf 更改为:

WSGIDaemonProcess info user=info group=info threads=25
WSGIProcessGroup info
WSGIApplicationGroup %{GLOBAL}

不幸的是我仍然有同样的问题。

编辑:

mod_wsgi 文档建议运行 GDB 进行调试。我得到了一些信息,但我不明白输出:

#0  0x00007f5aea4db293 in __poll (fds=<value optimized out>, nfds=<value optimized out>, timeout=<value optimized out>)
    at ../sysdeps/unix/sysv/linux/poll.c:87
#1  0x00007f5aeae0b370 in apr_poll (aprset=0x7fffb31f7130, num=1, nsds=0x7fffb31f7178, timeout=<value optimized out>) at poll/unix/poll.c:120
#2  0x00007f5ae501d5af in wsgi_daemon_main (p=0x102e138, daemon=0x1093ec0) at mod_wsgi.c:10801
#3  wsgi_start_process (p=0x102e138, daemon=0x1093ec0) at mod_wsgi.c:11269
#4  0x00007f5ae5020351 in wsgi_manage_process (reason=<value optimized out>, data=0x1093ec0, status=<value optimized out>) at mod_wsgi.c:9761
#5  0x00007f5aeae064a1 in apr_proc_other_child_alert (proc=<value optimized out>, reason=<value optimized out>, status=<value optimized out>)
    at misc/unix/otherchild.c:115
#6  0x00000000004bb50f in ap_mpm_run (_pconf=<value optimized out>, plog=<value optimized out>, s=<value optimized out>) at prefork.c:1073
#7  0x000000000042e2b4 in main (argc=4, argv=0x7fffb31f7588) at main.c:753

编辑2

回溯时,我看到一些外籍人士的队伍经过。因此,我检查了两个外籍人士版本:

[root@server info]# strings /etc/httpd/lib/libexpat.so.0 | grep expat_
expat_1.95.7


 pyexpat.version_info
(2, 0, 1)

似乎我的apache安装已经过时了......

4

1 回答 1

1

mod_wsgi 的常见问题解答中介绍了为什么 mod_wsgi 可能会崩溃。

特别是,您可能正在使用未正确编写的 C 扩展模块,无法在 Python 子解释器中工作,因此它崩溃了。

正如 mod_wsgi 的问题列表中所解释的,假设它是在该 mod_wsgi 守护进程中运行的唯一 WSGI 应用程序,强制它在主解释器中运行,使用:

WSGIApplicationGroup %{GLOBAL}
于 2013-09-21T21:19:48.290 回答