关于python:使用wsgi和apache设置django

Setup django with WSGI and apache

我是在mod wsgi和apache上销售的,而不是mod_python。我已经安装了所有的部件(django、apache、mod wsgi),但是部署时遇到了问题。

我在OSX 10.5上,有Apache2.2和Django1.0b2,mod_wsgi-2.3

我的申请叫Tred。

以下是相关文件:httpd vhosts(包含在httpd conf中)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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

1
2
3
4
5
6
7
8
9
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时,我会得到一个目录列表,而不是呈现的网站。我认为我已经正确地学习了这些教程,但显然是不对的。我该怎么做才能使这个工作成功?


请注意,alias和wsgiscriptaalias指令的优先级不同。因此,它们不会按写入的文件顺序进行处理。相反,所有别名指令都优先于wsgiscriptaalias指令。因此,如果"/"的别名出现在wsgiscriptaalias之后,它就不重要了,它仍然具有优先权。


如果删除Alias /指令会发生什么?


It works. I have no idea why, but it does.

供将来参考:

它工作是因为Apache按顺序处理别名指令,并使用第一个匹配项。它总是击中Alias /,这将匹配任何东西,在WSGIScriptAlias之前。

mod_alias文件中:

First, all Redirects are processed before Aliases are processed, and therefore a request that matches a Redirect or RedirectMatch will never have Aliases applied. Second, the Aliases and Redirects are processed in the order they appear in the configuration files, with the first match taking precedence.


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

您正在尝试在根目录(/)上托管apache/var/www/folder和django应用程序。由于alias指令优先于wsgiscriptaalias,因此它正在呈现apache目录。

您可以尝试在/app托管django应用程序。或者将/var/www/folder托管在其他位置,如/public