Recentemente, eu quis colocar um dos meus aplicativos WSGI em um subdiretório, para que os outros diretórios que contêm vários scripts funcionassem como antes. Para fazer isso, adicionei a seguinte diretiva ao meu httpd.conf
namespace global (também tentei colocá-la no VirtualHost
, que deu os mesmos efeitos):
WSGIScriptAlias /hello/ /var/www/hello/hello.wsgi
Então eu corri django-admin startproject hello
. Depois de recarregar as configurações do Apache, posso confirmar que http://localhost/hello/
aponta para uma tela de "boas-vindas" do Django. Então, editei hello/urls.py
para adicionar a seguinte linha na urlpatterns
tupla:
url(r'^hello/', 'hello.views.home'),
Em seguida, criei hello/views.py com o seguinte conteúdo:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
Infelizmente, quando tento visitar http://localhost/hello/hello
, recebo uma mensagem padrão do Apache 404 e a seguinte entrada no log de erros:
[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
Note o hello.wsgihello
. O segundo hello
é o texto que aparece depois /hello/
na URL. Pois http://localhost/hello/unknown
seria hello.wsgiunknown
. Aqui está o meu 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()
Fiz algo de errado? Como faço para corrigir isso?
Responder1
A sintaxe do arquivo /var/www/hello/hello.wsgi
me confundiu. Aparentemente, se apontarmos para /var/www/hello/hello.wsgi/
isso, a configuração funciona bem.