【问题标题】:Django WSGI Script Won't load due to a Python issue由于 Python 问题,Django WSGI 脚本无法加载
【发布时间】:2012-06-19 03:41:07
【问题描述】:

我试图让 Django 在 Apache2.22 上通过 mod_wsgi 运行,但我遇到了内部 500 错误。 我知道对此还有其他问题,但他们没有我的具体错误。这是我的回溯:

[Sat Jun 16 02:17:48 2012] [info] [client 128.227.11.143] mod_wsgi (pid=23071, process='partender', application='www.***.com|'): Loading WSGI script '/usr/home/***.com/zpencerq/part/apache/django.wsgi'.
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143] mod_wsgi (pid=23071): Target WSGI script '/usr/home/***.com/zpencerq/part/apache/django.wsgi' cannot be loaded as Python module.
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143] mod_wsgi (pid=23071): Exception occurred processing WSGI script '/usr/home/***.com/zpencerq/part/apache/django.wsgi'.
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143] Traceback (most recent call last):
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]   File "/usr/home/partender.myprotosite.com/zpencerq/part/apache/django.wsgi", line 9, in <module>
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]     import django.core.handlers.wsgi
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 2, in <module>
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]     from threading import Lock
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]   File "/usr/local/lib/python2.7/threading.py", line 15, in <module>
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]     from collections import deque
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]   File "/usr/local/lib/python2.7/collections.py", line 9, in <module>
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143]     from operator import itemgetter as _itemgetter
[Sat Jun 16 02:17:48 2012] [error] [client 128.227.11.143] ImportError: /usr/local/lib/python2.7/lib-dynload/operator.so: Undefined symbol "_PyUnicodeUCS4_AsDefaultEncodedString"

这似乎是 python 的问题,但我不知道如何处理回溯中的最后一个错误。这是python安装的问题吗? 我已经完成了简单的 WSGI hello world 应用程序,并且效果很好。这是 django 调用的问题。

我在 mod_wsgi.so 上使用了 'ldd' 并得到以下输出:

root@blah# ldd mod_wsgi.so
mod_wsgi.so:
ldd: mod_wsgi.so: Shared object "mod_wsgi.so" not found, required by "ldd"
mod_wsgi.so: exit status 1

【问题讨论】:

  • 作为参考,'ldd' 应该在你的 Apache 安装中的 mod_wsgi.so 上运行。 IOW,提供完整路径或位于同一目录中。见code.google.com/p/modwsgi/wiki/…
  • 我在同一个目录中。我认为 mod_wsgi.so 正在使用 Python 静态库而不是共享的响应。
  • 没有这样的东西。它说 ldd 在您所在的目录中找不到名为 mod_wsgi.so 的文件。如果它是静态链接的,它仍然会生成输出,但不会显示对 libpythonX.Y.so 的依赖。
  • 你是对的。显然我做错了什么虽然我很确定我做了 pwd 并且在当前目录中 root@seese# ldd /usr/local/apache/modules/mod_wsgi.so /usr/local/apache/modules/mod_wsgi.so: libutil.so.7 => /lib/libutil.so.7 (0x2817d000) libm.so.5 => /lib/libm.so.5 (0x2818a000) libc.so.7 => /lib/libc.so. 7 (0x28080000)
  • 格雷厄姆,这个问题已经解决了。我在这里创建了一个关于 WSGI 和 Django 进一步问题的新问题:stackoverflow.com/questions/11092089/…

标签: python django apache mod-wsgi


【解决方案1】:

您的 mod_wsgi 很可能是针对一个 Python 安装编译的,但您正试图强制它使用不同的 Python 安装。您遇到问题的原因是因为一个 Python 安装是使用 UCS2 支持编译的,而另一个是 UCS4。

在 mod_wsgi.so 上使用“ldd”来显示它尝试使用的 Python 安装,然后提供该信息作为问题的一部分以及您试图强制它使用不同 Python 安装的 mod_wsgi 配置或 WSGI 脚本内容,或不兼容的虚拟环境。

【讨论】:

  • 这个特定问题是由于 Python 的版本与 mod_wsgi3 的编译目标不兼容! (运行 2.7.2,mod_wsgi3 编译为 2.7.3)谢谢!我可能很快就会有另一个问题,并将单独发布。只是想说谢谢格雷厄姆!我看到你就像回答许多这些 django/wsgi 问题的主要人物,还在某个地方找到了你的指南!
猜你喜欢
  • 2018-01-18
  • 1970-01-01
  • 2022-01-02
  • 2021-11-28
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多