Apache/mod_wsgi/django/arch linux 自 64 位升级以来的问题,尽管能够导入所有库

Apache/mod_wsgi/django/arch linux woes since 64 bit upgrade, despite being able to import all libraries

几个小时以来,我一直在努力找出导致此问题的原因,但没有成功。

自从将我的 arch linux 安装迁移到 64 位后,我发现我的 django 站点无法运行,出现错误 500。我正在使用 python2,它是 64 位的:

>>> import struct
>>> print struct.calcsize("P") * 8
64

我也有 64 位 mod_wsgi2: https://www.archlinux.org/packages/community/x86_64/mod_wsgi2/

这是一个示例日志:

[Mon Feb 20 21:42:40.312829 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898] mod_wsgi (pid=19537): Target WSGI script '/home/james/sites/dse/django.wsgi' cannot be loaded as Python module.
[Mon Feb 20 21:42:40.312872 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898] mod_wsgi (pid=19537): Exception occurred processing WSGI script '/home/james/sites/dse/django.wsgi'.
[Mon Feb 20 21:42:40.312916 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898] Traceback (most recent call last):
[Mon Feb 20 21:42:40.312953 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]   File "/home/james/sites/dse/django.wsgi", line 12, in <module>
[Mon Feb 20 21:42:40.312997 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]     from django.core.wsgi import get_wsgi_application
[Mon Feb 20 21:42:40.313006 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]   File "/usr/lib/python2.7/site-packages/django/__init__.py", line 3, in <module>
[Mon Feb 20 21:42:40.313056 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]     from django.utils.version import get_version
[Mon Feb 20 21:42:40.313066 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]   File "/usr/lib/python2.7/site-packages/django/utils/version.py", line 3, in <module>
[Mon Feb 20 21:42:40.313078 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898]     import datetime
[Mon Feb 20 21:42:40.313103 2017] [wsgi:error] [pid 19537] [client 146.179.195.99:62898] ImportError: /usr/lib/python2.7/lib-dynload/datetime.so: wrong ELF class: ELFCLASS64
[Mon Feb 20 21:42:40.313185 2017] [access_compat:error] [pid 19537] [client 146.179.195.99:62898] AH01797: client denied by server configuration: /usr/share/httpd/error/HTTP_INTERNAL_SERVER_ERROR.html.var

所以,我尝试手动导入所有这些东西,看看是否出错,没有:

[james@tryptophan ~]$ python2
Python 2.7.13 (default, Dec 21 2016, 07:16:46)
[GCC 6.2.1 20160830] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import django
>>> from django.core.wsgi import get_wsgi_application
>>> from django.utils.version import get_version

我检查过我有: LoadModule wsgi_module modules/mod_wsgi.so

在我的httpd.conf中,与错误有关的/home/james/sites/dse/django.wsgi文件的内容大约3年(!)没有改变,如下:

[james@tryptophan dse]$ cat django.wsgi
import os
import sys

sys.path.append('/home/james/sites/dse/django_dse')
sys.path.append('/home/james/sites/dse')

os.environ['DJANGO_SETTINGS_MODULE'] = 'django_dse.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

所以我不确定该怎么做。我的意思是这听起来像是 32/64 位兼容性问题,错误是 ImportError: /usr/lib/python2.7/lib-dynload/datetime.so: wrong ELF class: ELFCLASS64 - 但我不知道是什么导致它。

有什么想法吗?

事实证明,错误实际上是在加载一个非 64 位的单独 apache 模块中。我在 httpd.conf:

中加载了一个 32 位模块
LoadModule fastcgi_module modules/mod_fastcgi.so

我实际识别它的方法是 运行 'apachectl' 程序,然后给我一个与导入 32 位模块相关的错误。

注释掉后,我所有的 64 位 Django 网站都恢复了生机。我不知道为什么会这样,我不知道...