Django搭配mod_python 作者:xieaotian发表于2008-08-20 16:08:37
对于上线的django系统,官方推荐的方式是apache带mod_python。
应该是和mod_perl差不多,apache启动的时候就把python代码load到内存中,这些代码将誓与服务器进程共存亡,这样据说可以极大地提高性能。Django需要apache 2.x和mod_python 3.x,你还必须使用apache的prefork MPM。
基本配置:
- 编辑httpd.conf文件
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
这将告诉apache,对于所有/mysite/下的URL,请给我使用mod_python。Apache会将DJANGO_SETTINGS_MODULE的值传递给mod_python,这样mod_python会知道该使用哪一个settings。
注意应该把PythonDebug选项关掉,在上线系统中出现问题时,用户会看到你那些丑陋的python trackback。。。
还有一点,用mod_python部署了django之后,每次修改了代码,就不得不重启apache。
下面谈谈一个apache中怎么搞多个django:
很简单,如同虚拟主机那样:
NameVirtualHost *
ServerName www.example.com
...
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
ServerName www2.example.com
...
SetEnv DJANGO_SETTINGS_MODULE mysite.other_settings
关于media文件:
Django并不会自己去搞media文件,这些都留给了外层的web服务器。
官方推荐的做法是,用独立的web服务器来做(比如lighttpd、TUX 、A stripped-down version of Apache ——说句实话,我还不是很清楚他的意思)。
不过,如果没有选择,当然可以就用apache的这个虚拟主机来搞media文件:
SetHandler None
官方给出的下面这个例子中,django被设在根上,而且显式关掉django解析media子目录以及jpg/png/gif文件:
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
SetHandler None
SetHandler None
关于admin files
别忘了admin下面的media文件,虽然开发的时候感觉不到,其实也需要我们手工搞定的。
admin的media文件在这里:django/contrib/admin/media
官方文档推荐两种做法:
在你的目录下创建一个到admin media文件的符号链接,这样所有的东西呆在一个地方,而且你还可以进行svn update。
或者干脆一古脑全部拷贝一份到你的apache指定的site目录下去。
关于出错处理
需要注意:mod_python中出现的错误,不会被报到apache的error_log文件中。
如果。。。遇到恐怖的segmentation fault:
如果Apache出现了segmentation fault,有两种原因, 但是和Django都没有关系.
可能是因为你的python代码正在importing "pyexpat" module, 这个模块可能会和Apache自带的版本冲突. 更多信息可参见Expat Causing Apache Crash.
还有一种可能是你在一个apache中同时运行了mod_python和mod_php, 并且使用MySQL作为后台数据库。在某些情况下,由于PHP和python的MySQL的backend会发生冲突,从而导致mod_python的一个问题,详情参阅 mod_python FAQ entry.
如果mod_python仍然出现问题,最简便的方法就是先掐了django,再看看一个barebones的mod_python是否正常工作。这里 [url=http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking]Getting mod_python Working[/url]有详细方法。
(以上文字摘录并翻译自Django官方文档——Using Django with mod_python)
spyler回复于2008-10-02 17:51:42
请问老大,只用apache mod_python python
不用Django 能否作WEB网站程序?
新手请教,不要笑话!
回复主题