Недавно я хотел поместить одно из моих приложений WSGI в подкаталог, чтобы другие каталоги, содержащие различные скрипты, работали как и прежде. Чтобы сделать это, я добавил следующую директиву в свое httpd.conf
глобальное пространство имен (также пытался поместить ее в VirtualHost
, что дало тот же эффект):
WSGIScriptAlias /hello/ /var/www/hello/hello.wsgi
Затем я запустил django-admin startproject hello
. После перезагрузки Apache configs я могу подтвердить, что это http://localhost/hello/
указывает на экран «приветствия» Django. Затем я отредактировал, hello/urls.py
добавив следующую строку в urlpatterns
кортеж:
url(r'^hello/', 'hello.views.home'),
Далее я создал hello/views.py со следующим содержимым:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
К сожалению, когда я пытаюсь зайти на сайт http://localhost/hello/hello
, я получаю стандартное сообщение Apache 404 и следующую запись в журнале ошибок:
[Mon Dec 23 19:49:44 2013] [error] [client 31.182.131.38] Target WSGI script not found or unable to stat: /var/www/hello/hello.wsgihello
Обратите внимание на hello.wsgihello
. Второй hello
— это текст, который появляется после /hello/
в URL. Для http://localhost/hello/unknown
, это будет hello.wsgiunknown
. Вот мой hello.wsgi
:
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'hello.settings'
path = '/var/www/hello'
if path not in sys.path:
sys.path.append(path)
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Я что-то сделал не так? Как это исправить?
решение1
Синтаксис файла /var/www/hello/hello.wsgi
меня смутил. Видимо, если указать на /var/www/hello/hello.wsgi/
, конфигурация работает нормально.