我的环境XP, site目录d:/WWW
1) 安装Python2.6
2) 安装Django1.1.1
检测:
#在site目录d:/www下,创建mytest测试
python django-admin.py startprotject mytest
cd mytest
#启动mytest的server
manage.py runserver
open http://127.0.0.1:8000/ 你将会看到 welcome to django,django 安装成功
3) 安装Apache2.2, 并下载mod_wsgi.so, 拷贝到Apache的modules目录,在httpd.conf配置文件中添加以下
LoadModule wsgi_module modules/mod_wsgi.so
(#注意wsgi_module而非mod_wsgi; modules/mod_wsgi.so中 mod_wsgi.so应为实际mod_wsgi.so文件的名称)
Include "D:/WWW/apache_django_wsgi.conf "
(#注意D:/WWW是整个site目录所在,根据自己情况改变,apache_django_wsgi.conf 为site添加的配置,为了保持httpd.conf的独立性)
4) 在site的目录(我的目录是D:/WWW)添加两个文件apache_django_wsgi.conf(site的配置文件)和django.wsgi(wsgi脚本)
apache_django_wsgi.conf
AliasMatch /js/.*/.(js) d:/WWW/media/js/$1
<Directory "d:/WWW/media/js ">
Order allow,deny
Options Indexes
Allow from all
#IndexOptions FancyIndexing
</Directory>
Alias /static/.*/.(css|gif|png|jpg|jpeg) d:/WWW/media/static/$1
<Directory "d:/WWW/media/static ">
Order allow,deny
Options Indexes
Allow from all
#IndexOptions FancyIndexing
</Directory>
#for testing wsgi
#WSGIScriptAlias / "d:/WWW/test.wsgi "
WSGIScriptAlias / "d:/WWW/django.wsgi "
<Directory "d:/WWW ">
Allow from all
</Directory>
django.wsgi
import os, sys
#Calculate the path based on the location of the WSGI script.
apache_configuration= os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
#
sys.stdout = sys.stderr
sys.path.append(workspace)
#print workspace
sys.path.append(workspace + "WWW ")
os.environ['DJANGO_SETTINGS_MODULE'] = 'mytest.settings '
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
这里需要解释一下, 'mytest.settings' 中 mytest是我的Django项目名, sys.path.append(workspace + "WWW") 中 "WWW"是我的site目录,sys.stdout = sys.stderr 是将标准输出到Apache的error.log中便于调试wsgi脚本
apache_django_wsgi.conf中的 #WSGIScriptAlias / "d:/WWW/test.wsgi" test.wsgi文件是为了测试mod_wsgi是否工作的脚本(后面将会提到)
5) 这个时候就可以启动Apache来检测mod_wsgi是否完成(这里mod_wsgi必须跟Apache和python的版本匹配,如果不同,mod_wsgi启动会提示mod_wsgi.so找不到,我也遇到比较奇怪的问题,版本也匹配了,可就是Apache启动不成功,最后还是重启了机器才搞定,在这个过程中可以用test apache来测试是否有什么问题)
6) Apache能启动之后,可以用下面的test.wsgi脚本来测试mod_wsgi是否work,(注意必须更改apache_django_wsgi.conf中 WSGIScriptAlias 的wsgi脚本到test.wsgi,测试完成后改回django.wsgi,每次改动都需要重启Apache)
test.wsgi
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
如果输出Hello World! 就表明wsgi配置ok啦
Tips:
整个过程中,多看logs/error.log,查找其中错误的原因
python2.6的bin目录和Django的bin目录最好放在系统的环境的PATH中
先预告一下,下面将要做一个Django集成Mako模板的网站,会做一些Django和Mako模板相关的总结。