人们在设置 django 以由 apache 和 mod-wsgi 提供服务时遇到困难是很常见的。常见的症状是“导入错误”......由于某种原因(通常在每种情况下略有不同)settings.py 或类似的文件无法导入(有关众多示例,请参阅本页右栏中的“相关”!)。
我已经阅读了有关此主题的其他问题,似乎没有一个解决方案适合我的情况(一个是由回答者识别的海报的基本错误配置 - 我似乎没有这个问题,其他问题适用于使用其他模块中的 wsgi 等)。
当apache/mod-wsgi加载失败时,如何调试它?
您可以做什么来让某些内容给您提供比“导入错误”更好的消息?
显然,我正在寻找一种方法来识别我的案例中的问题。但我真的很想知道如何调试此类故障:我似乎无法找到有关导致其失败的原因的信息。
就我而言,我正在尝试使用 mod-wsgi 进行看似简单的 django 部署 - 实际上是按照书本,与文档相同,但出现错误:
ImportError: Could not import settings 'cm_central.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named cm_central.settings
我不明白为什么它找不到这个模块。
/home/cmc/src/cm_central/cm_central/settings.py 存在,可以由 pythonn 加载而不会出现错误,并且实际上可以正常工作./manage.py runserver
.
是否有可能在 apache 上下文中发生一些导入错误,而当我自己加载它时不会发生?我想知道“设置文件中是否存在导入错误?” ……为什么这么问?如果导入错误,我该如何调试?
我在 /etc/apache2/sites-enabled/cm-central 中有这个:
<VirtualHost *:80>
WSGIScriptAlias / /home/cmc/src/cm_central/cm_central/wsgi.py
WSGIDaemonProcess cm-central.johalla.de python-path=/home/cmc/src/cm_central:/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages
WSGIProcessGroup cm-central.johalla.de
<Directory /home/cmc/src/cm_central/cm_central>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
</VirtualHost>
这在 wsgi.py 中:(我没有根据 django 生成的内容修改它)
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cm_central.settings")
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
完整的回溯是:
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] mod_wsgi (pid=10273): Target WSGI script '/home/cmc/src/cm_central/cm_central/wsgi.py' cannot be loaded as Python module.
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] mod_wsgi (pid=10273): Exception occurred processing WSGI script '/home/cmc/src/cm_central/cm_central/wsgi.py'.
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] Traceback (most recent call last):
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/src/cm_central/cm_central/wsgi.py", line 16, in <module>
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] application = Cling(get_wsgi_application())
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] django.setup()
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages/django/__init__.py", line 20, in setup
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages/django/conf/__init__.py", line 46, in __getattr__
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] self._setup(name)
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] self._wrapped = Settings(settings_module)
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] File "/home/cmc/virtualenvs/cmc/lib/python2.7/site-packages/django/conf/__init__.py", line 98, in __init__
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] % (self.SETTINGS_MODULE, e)
[Sun Nov 09 12:00:01 2014] [error] [client 192.168.122.40] ImportError: Could not import settings 'cm_central.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named cm_central.settings
[Sun Nov 09 12:04:06 2014] [notice] Graceful restart requested, doing restart
[Sun Nov 09 12:04:06 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u14 mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Sun Nov 09 21:34:15 2014] [error] Not Found: /
如果一个答案可以帮助我发现问题所在,那就太好了 - 但更好的是“如何调试这个”的答案。一个人如何发现whysettings.py 无法加载?