Настройка django с WSGI и apache - PullRequest
       60

Настройка django с WSGI и apache

9 голосов
/ 31 августа 2008

Я был продан на mod_wsgi и apache, а не на mod_python. У меня установлены все части (django, apache, mod_wsgi), но возникла проблема с развертыванием.

Я на OSX 10.5 с Apache 2.2 и Django 1.0b2, mod_wsgi-2.3

Мое приложение называется Tred.

Вот соответствующие файлы: httpd-vhosts (входит в 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()

Когда я перехожу на http://tred, я получаю список каталогов, а не отображаемый веб-сайт. Я думаю, что правильно следовал инструкциям, но это, очевидно, неправильно. Что я могу сделать, чтобы сделать эту работу?

Ответы [ 4 ]

7 голосов
/ 24 июня 2009

Обратите внимание, что директивы Alias ​​и WSGIScriptAlias ​​не имеют одинакового приоритета. Таким образом, они не будут обрабатываться в том порядке, в котором они записаны. Вместо этого все директивы Alias ​​имеют приоритет над директивами WSGIScriptAlias. Таким образом, это не имело бы значения, если бы псевдоним для «/» появился после WSGIScriptAlias, он все равно имел бы приоритет.

6 голосов
/ 31 августа 2008

Что произойдет, если вы удалите директиву Alias /?

5 голосов
/ 01 сентября 2008

Это работает. Понятия не имею почему, но это так.

Для дальнейшего использования:

Это работает, потому что Apache обрабатывает директивы псевдонимов по порядку и использует первое совпадение. Он всегда нажимал Alias /, что будет соответствовать чему угодно, до WSGIScriptAlias.

Из mod_alias документации :

Во-первых, все перенаправления обрабатываются до обработки псевдонимов, и поэтому к запросу, соответствующему Redirect или RedirectMatch, никогда не будут применяться псевдонимы. Во-вторых, псевдонимы и перенаправления обрабатываются в порядке их появления в файлах конфигурации, причем первое совпадение имеет приоритет.

2 голосов
/ 23 июля 2013

попробуйте следовать этому уроку - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

вы пытаетесь разместить папку apache / var / www / и приложение Django в корневом каталоге (/). Поскольку директива Alias ​​имеет приоритет над WSGIScriptAlias, она отображает каталог apache.

вы можете попробовать разместить приложение django в / app. Также можно разместить папку / var / www / в другом месте, например / public

...