Gre*_*ade 6 python apache django mod-wsgi
人们通过apache和mod-wsgi设置django是很常见的.常见的症状是"导入错误"...由于某种原因(在每种情况下通常略有不同)settings.py或类似的不导入(有关大量示例,请参阅本页右栏中的"相关"!).
我已经阅读了关于这个主题的其他问题,似乎没有一个解决方案适用于我的情况(一个是由回答者发现的海报的基本错误配置 - 我似乎没有这个问题,其他人适用于使用来自其他模块的wsgi等).
当apache/mod-wsgi无法加载时,你如何调试它?
你能做些什么来为你提供比"导入错误"更好的信息?
显然,我正在寻找一种方法来识别我的错误.但我真的想知道如何调试这种类型的失败:我似乎无法找到有关它导致失败的信息.
在我的情况下,我试图用mod-wsgi做一个看似简单的django部署 - 实际上是本书,与doc相同,但得到错误:
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
Run Code Online (Sandbox Code Playgroud)
我看不出为什么找不到这个模块.
/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>
Run Code Online (Sandbox Code Playgroud)
这在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())
Run Code Online (Sandbox Code Playgroud)
完整的追溯是:
[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: /
Run Code Online (Sandbox Code Playgroud)
如果一个答案可以帮助我发现什么是错的,那就太好了 - 但更好的是"如何调试这个"的答案.如何找出为什么 settings.py不会加载?
而且它是如此明显:
从 settings.py 中打印出所有重要的内容,然后查看 apache 日志以查看您获得的内容,然后将其与您在开发中获得的内容进行比较!
链接的文章建议在 settings.py 中使用这组打印:
导入系统、操作系统
print "__name__ =", __name__
print "__file__ =", __file__
print "os.getpid() =", os.getpid()
print "os.getcwd() =", os.getcwd()
print "os.curdir =", os.curdir
print "sys.path =", repr(sys.path)
print "sys.modules.keys() =", repr(sys.modules.keys())
print "sys.modules.has_key('mysite') =", sys.modules.has_key('mysite')
if sys.modules.has_key('mysite'):
print "sys.modules['mysite'].__name__ =", sys.modules['mysite'].__name__
print "sys.modules['mysite'].__file__ =", sys.modules['mysite'].__file__
print "os.environ['DJANGO_SETTINGS_MODULE'] =", os.environ.get('DJANGO_SETTINGS_MODULE', None)
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我还添加了 DATABASE_URL,后来添加了 EMAIL_HOST_USER 等
文章还很好地解释了整个启动过程是如何发生的,这是值得的。
请注意,它与 django 本身有点过时,因此他提出的最终“替代 wsgi.py”可能不太适用,但调试技术肯定是适用的。