У меня есть приложение django, которое отлично работает под сервером разработки django. Я пытаюсь развернуть его в apache2.2 с помощью mod_wsgi, и у меня есть ошибки. В файле httpd.conf я «смонтировал» свое приложение под корнем / myapp, используя:
<IfModule wsgi_module>
WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi
WSGIScriptReloading On
WSGIDaemonProcess djangoapps processes=10 threads=1 maximum-requests=500 display-name=my-wsgi
WSGIProcessGroup djangoapps
</IfModule>
Я следовал стандартным инструкциям по подготовке django.wsgi. Теперь я могу добраться до шаблона главной страницы своего приложения, но, похоже, у него есть ошибки перенаправления. Корень "/ myapp" не вставляется автоматически в запросы перенаправления ULR. Запрос из шаблона главной страницы к некоторым модулям в views.py через urls.py не может быть доставлен правильно.
журнал доступа к apache:
127.0.0.1 - - [21/Feb/2011:16:11:44 +0100] "GET /myapp/ HTTP/1.1" 200 1795
127.0.0.1 - - [21/Feb/2011:16:11:46 +0100] "GET /api/dir HTTP/1.1" 404 205
"/ api / dir" не существует, он должен соответствовать шаблону в urls.py, а id - нет.
журнал ошибок apache:
[Tue Feb 21 16:11:46 2011] [error] [client 127.0.0.1] File does not exist: /home/my_path_to_django_app_superfolder/api, referer: http://127.0.0.1/myapp/
Я провел с ним больше 2 дней, может кто-нибудь помочь?
Наконец я нашел ошибку. Он был связан не с файлом httpd.conf, а с тем, как указываются URL-адреса как для файла django urls.py, так и для шаблонов.
Когда я установил свое приложение таким образом:
WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi
Я полагал, что URL-адреса, указанные в файлах шаблонов django, должны иметь начальную косую черту, например: '/api/dir'
Получается, что таким образом приложение работает только на сервере разработки django, но не на apache.
Вместо этого, если вы используете URL-адреса без начальной косой черты, например:
'api/dir'
Приложение корректно работает как на сервере разработки django, так и на apache!
Вы должны избегать использования начальных слэшей даже при сопоставлении с шаблоном файла django urls.py:
как это: (r'^api/dir$', 'available_services')
и НЕ так: (r'^/api/dir$', 'available_services')
Возможно, это очевидная вещь для опытных пользователей django, но если вы новичок, как я, это может привести к потере определенного количества времени, потому что эту проблему сложно обнаружить.