用WSGI和apache设置django

时间:2008-08-31 12:03:21

标签: python django apache mod-wsgi

我已经在mod_wsgi和apache而不是mod_python上出售了。 我安装了所有部件(django,apache,mod_wsgi)但是遇到了部署问题。

我在apx 2.2上使用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 个答案:

答案 0 :(得分:7)

请注意,Alias和WSGIScriptAlias指令不具有相同的优先级。因此,它们不会按文件顺序处理。相反,所有Alias指令都优先于WSGIScriptAlias指令。因此,如果在WSGIScriptAlias之后出现'/'的别名,它将不再重要,它仍然优先。

答案 1 :(得分:6)

如果删除Alias /指令会怎样?

答案 2 :(得分:5)

  

有效。我不明白为什么,但确实如此。

供将来参考:

它的工作原理是因为Apache按顺序处理别名指令,并使用第一个匹配。它总是在Alias /之前点击WSGIScriptAlias,它会匹配任何内容。

来自mod_alias documentation

  

首先,在处理别名之前处理所有重定向,因此与RedirectRedirectMatch匹配的请求永远不会应用别名。其次,别名和重定向按照它们在配置文件中出现的顺序进行处理,第一次匹配优先。

答案 3 :(得分:2)

尝试遵循本教程 - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

您正尝试在root(/)上托管apache / var / www /文件夹和Django应用程序。由于Alias指令优先于WSGIScriptAlias,因此它正在呈现apache目录。

您可以尝试在/ app上托管django应用。或者将/ var / www /文件夹托管在/ public

之类的其他位置