Python Django和mod_wsgi根URL配置
我在使用Apache和mod_wsgi为Django项目提供服务时遇到了一个非常奇怪的问题。当请求URL时,mod_wsgi和Django似乎完全忽略了我的ROOT_URLCONF指令,只使用我的应用程序中的URL.py。但是,当我运行纯Django web服务器时,它运行正常 这是我的基本项目结构:Python Django和mod_wsgi根URL配置,python,django,mod-wsgi,django-urls,Python,Django,Mod Wsgi,Django Urls,我在使用Apache和mod_wsgi为Django项目提供服务时遇到了一个非常奇怪的问题。当请求URL时,mod_wsgi和Django似乎完全忽略了我的ROOT_URLCONF指令,只使用我的应用程序中的URL.py。但是,当我运行纯Django web服务器时,它运行正常 这是我的基本项目结构: ├── myproject/ │ ├── config/ │ ├── __init__.py │ ├── settings.py │ └── urls.py <-- this
├── 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
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>
此外,不会为我的配置目录中的url.py文件生成编译的字节码。很明显,Django甚至都没有触及它。在config、myapp和myproject中是否有_uinit____;.py文件?Apache用户将没有对代码文件目录的写访问权来创建.pyc文件。@GrahamDumpleton它似乎有访问权,并且所有其他.pyc文件都正确生成。除了url.py之外,每个.py文件都有一个对应的.pyc文件。这是否意味着代码目录被设置为Apache用户所有,或者目录被设置为世界可写?通常情况下,默认Apache用户不能写入目录。删除其他一些.pyc文件,然后重新运行Apache,看看是否重新创建了它们。这将确认.pyc文件是否因为Django开发服务器而存在。@GrahamDumpleton您完全正确-这些是运行开发服务器的遗留文件。我应该抓住那个。。。谢谢虽然我仍然不确定为什么它不遵守我在config/url.py中设置的规则
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>