Configure o Django com WSGI e Apache
Pergunta
Fui vendido em mod_wsgi e apache em vez de mod_python.Tenho todas as partes instaladas (django, apache, mod_wsgi), mas tive problemas na implantação.
Estou no osx 10.5 com apache 2.2 e django 1.0b2, mod_wsgi-2.3
Meu aplicativo se chama tred.
Aqui estão os arquivos relevantes:httpd-vhosts (incluído em httpd-conf)
NameVirtualHost tred:80 ServerName tred Alias /admin_media /usr/lib/python2.5/site-packages/django/contrib/admin/media Order allow,deny Allow from all Alias /media /Users/dmg/Sites/tred/media Order allow,deny Allow from all Alias / /Users/dmg/Sites/tred/ Order allow,deny Allow from all WSGIScriptAlias / /Users/dmg/Sites/tred/mod_wsgi-handler.wsgi WSGIDaemonProcess tred user=dmg group=staff processes=1 threads=10 WSGIProcessGroup tred
mod_wsgi-handle.wsgi
import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') os.environ['DJANGO_SETTINGS_MODULE'] = 'tred.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
Quando eu for para http://tred Recebo uma listagem de diretório em vez do site renderizado.Acho que segui os tutoriais corretamente, mas obviamente não está certo.O que posso fazer para que isso funcione?
Solução
O que acontece se você remover o Alias /
diretiva?
Outras dicas
Observe que as diretivas Alias e WSGIScriptAlias não têm a mesma precedência.Portanto, eles não serão processados na ordem de arquivo conforme estão escritos.Em vez disso, todas as diretivas Alias têm precedência sobre as diretivas WSGIScriptAlias.Assim, não teria importância se o Alias para '/' aparecesse depois de WSGIScriptAlias, ele ainda teria precedência.
Funciona.Não tenho ideia do porquê, mas acontece.
Para referência futura:
Funciona porque o Apache processa as diretivas de alias em ordem e usa a primeira correspondência.Estava sempre batendo Alias /
, que corresponderá a qualquer coisa, antes WSGIScriptAlias
.
Primeiro, todos os Redirecionamentos são processados antes dos Aliases serem processados e, portanto, uma solicitação que corresponda a um
Redirect
ouRedirectMatch
nunca terá Aliases aplicados.Segundo, os Aliases e Redirecionamentos são processados na ordem em que aparecem nos arquivos de configuração, com a primeira correspondência tendo precedência.
tente seguir este tutorial - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/
você está tentando hospedar a pasta /var/www/ do Apache e o aplicativo Django na raiz (/).Como a diretiva Alias tem precedência sobre WSGIScriptAlias, ela está renderizando o diretório Apache.
você pode tentar hospedar o aplicativo Django em /app.Como alternativa, hospede a pasta /var/www/ em um local diferente, como /public