我在使用Apache和mod_wsgi服务Django项目时遇到了一个非常奇怪的问题。当请求URL时,mod_wsgi和Django似乎完全忽略了我的ROOT_URLCONF指令,只使用了我的应用程序中的urls.py。但是,当我运行纯Django Web服务器时,它运行正常。
这是我的基本项目结构:
├── myproject/
│ ├── config/
│ ├── __init__.py
│ ├── settings.py
│ └── urls.py <-- this is somehow ignored when run with mod_wsgi
├── myapp/
│ ├── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py <-- this is default when run with mod_wsgi
│ └── views.py
├── __init__.py
├── manage.py
└── wsgi.py
编辑:每个.py文件在服务器运行时获取相应的.pyc文件除 urls.py - 这些是来自的文件在开发模式下运行。
在settings.py中:
ROOT_URLCONF = 'config.urls'
wsgi.py:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Apache config(/etc/httpd/conf.d/myproject.conf):
WSGIScriptAlias /myproject /opt/django/myproject/wsgi.py
WSGIPythonPath /opt/django/myproject
WSGIPassAuthorization Off
WSGISocketPrefix /var/lib/django/myproject
WSGIDaemonProcess myproject python-path=/opt/django/myproject processes=2 threads=8
WSGIProcessGroup myproject
<Directory /opt/django/myproject/>
<Files wsgi.py>
AuthType None
Order deny,allow
Allow from all
</Files>
</Directory>
此外,我的config目录中的urls.py文件没有生成编译后的字节码。这显然它甚至没有被Django触及。