Apache/mod_wsgi/django/Arch Linux Woes自64位升级以来,尽管能够导入所有库



我一直在尝试找出几个小时但没有运气的原因是什么。

以来,由于将我的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模块/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位的兼容性问题,错误是Inferterror:/usr/lib/python2.7/lib-dynload/datetime.so:错误的小精灵类:ElfClass64-但是我无法弄清楚是什么原因。

有什么想法?

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

LoadModule fastcgi_module modules/mod_fastcgi.so

我实际确定的方式是通过运行" Apachectl"程序,该程序给了我与32位模块的导入有关的错误。

当对此进行评论时,我所有的64个Django网站都恢复了生命。我不知道的原因是为什么这表现出来的...

最新更新