Thursday, December 24, 2009

mod_wsgi发布django

web framework的分布, 一般就用两种方式:
1. embed
2. daemon

其实这两种方式都有自己的特点.  只是本人喜欢使用embed方式分布. 因为有http server在把关. 藕合性好点。

python的web分布, 无疑WSGI比较正统. 都成了PEP文档了.

apache + mod_wsgi支持framework的embed方式. 并且配置简单.

安装mod_wsgi后, 加载module:

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

配置站点
<VirtualHost *:80>
        ServerAdmin jessinio@gmail.com

        WSGIScriptAlias / /home/jessinio/data/workspace/project/django.wsgi

        <Directory /home/jessinio/data/workspace/project/>
        Order allow,deny
        Allow from all
        </Directory>
</VirtualHost>


django.wsgi文件的内容:

#!/usr/bin/env python

import os
import sys
# mod_wsgi对stdout的写做了限制. 如果代码里直接使用了print这样对stdout操作的語句的话, 可以使用下面修改stdout的方法.
# 这样, 代码里对stdout的操作都会成为stderr, 而stderr的内容在apache的error日志文件内

sys.modules['sys'].stdout = sys.modules['sys'].stderr

# 不希望使用绝对路径的硬编码方式, 可以使用下面的__file__变量这种好方法
# 此文件放在project目录下
file_path = os.path.dirname(__file__)
parent_path = os.path.dirname(file_path)

sys.path.append(file_path)
sys.path.append(parent_path)


os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
# WSGI的核心工作函数
application = django.core.handlers.wsgi.WSGIHandler()


OK, 很方便的收工了.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.