Когда я запускаю свое приложение, используя встроенный сервер Djangos, все работает нормально. Но когда я пытаюсь запустить через Apache и WSGI, URL больше не распознается, а находится в файле urls.py.
Я получаю сообщение об ошибке:
Page not found (404)
Request Method: GET
Request URL: http://localhost/project/app/live/
Using the URLconf defined in project.urls, Django tried these URL patterns, in this order:
^media/(?P<path>.*)$
^app/live/
The current URL, app/live/, didn't match any of these.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
Как видите, URL (app / live /) находится прямо в шаблонах URL из файла urls.py верхнего уровня. Также нет ошибок в файле Apache errors.log.
Мои urls.py:
from django.conf.urls.defaults import *
from django.conf import settings
urlpatterns = patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{ 'document_root': settings.MEDIA_ROOT }),
(r'^app/live/', include('project.app.urls', app_name='live')),
)
Мой файл WSGI:
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../..')
os.environ["DJANGO_SETTINGS_MODULE"] = "project.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
И, наконец, моя конфигурация Apache:
WSGIDaemonProcess project processes=2 maximum-requests=500 threads=1
WSGIProcessGroup project
WSGIScriptReloading On
WSGIScriptAlias /project /home/user/project/apache/project.wsgi
EDIT:
После ввода некоторого отладочного вывода в RegexURLResolver я увидел, что он пытается разрешить как app/live/
, так и project/app/live/
.
Итак, я изменил свой файл urls.py на этот:
from django.conf.urls.defaults import *
from django.conf import settings
urlpatterns = patterns('',
(r'^app/live/', include('project.app.urls', app_name='live')),
(r'^project/app/live/', include('project.app.urls', app_name='live')),
)
Работает сейчас.