我正在通过mod_wsgi在prodiction中设置django项目。
问题是wsgi应用程序失败并出现错误AttributeError: 'Settings' object has no attribute 'ROOT_URLCONF'
,我无法理解。当我通过./manage.py runserver
运行相同的项目时,它工作正常。
项目结构:
/var/www/python/projectname.org/projectname
./core/
./core/wsgi.py
./core/settings/
./__init__.py
./django.py
./extensions.py
./secrets.py
./server.py
./project.py
./app1
./app2
./templates
./static
...
是的,通常的Django设置文件被拆分成几个。这在dev env中运行得非常好,不知道这是否与我在WSGI生产环境中遇到的问题有关。
在python的控制台中我可以轻松导入projectname.core.settings
,但它内部也没有ROOT_URLCONF
。
wsgi.py:
import os
import sys
sys.path.append('/var/www/python/projectname.org')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projectname.core.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
apache virtualhost conf:
<VirtualHost *:80>
ServerAdmin alex@projectname.org
ServerName projectname.org
DocumentRoot /var/www/python/projectname.org/projectname/core
WSGIScriptAlias / /var/www/python/projectname.org/projectname/core/wsgi.py
<Directory /var/www/python/projectname.org/projectname>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
...
</VirtualHost>
当我尝试在控制台中导入projectname.core.settings
时 - 导入工作正常,但我也无法访问ROOT_URLCONF
。显然这是相关的,但为什么它可以通过runserver
起作用?我如何通过wsgi或控制台使其工作?