zoukankan      html  css  js  c++  java
  • 用Apache+mod_wsgi部署python程序 作者:leven | 日期20101129 00:09:37

    用Apache+mod_wsgi部署python程序 - Leven's Blog

    用Apache+mod_wsgi部署python程序

    使用Apache+mod_wsgi部署webpy等python程序

    webpy是一个python上的非常轻量级的web框架,它和其他许多python web框架一样,都能支持wsgi部署,而目前来看比较优秀的wsgi部署方案自然是Apache+mod_wsgi,它提供非常简单优秀的部署方式,使得python程序的部署不再困难,本文将详细讲述在Apache上部署mod_wsgi的方法,并尝试使用mod_wsgi支持webpy程序.

    首先,我们假定我们的服务器已经安装配置好Apache了,安装路径为/usr/local/apache,虚拟主机配置文件在/usr/local/apache/conf/vhost下,那么我们可以开始安装mod_wsgi.
    从mod_wsgi的官方网站http://code.google.com/p/modwsgi/下载最新的源代码,截止到本文,其最新版为3.3.下载解压,我们需要编译安装
    在编译之前,我们需要确认当前环境是否能支持mod_wsgi,编译它需要完整的gcc编译环境,同时必须保证安装了python和python-dev包,如果您不确定是否有python支持,在debian上可以直接apt-get安装

    1apt-get install python python-dev

    如果提示未安装,安装即可
    下面开始编译mod_wsgi

    1./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/bin/python
    2make
    3make install

    如果没有错误,那么恭喜,mod_wsgi已经被成功编译并安装了.
    然后我们编辑/usr/local/apache/conf/httpd.conf文件
    加上

    1LoadModule wsgi_module modules/mod_wsgi.so
    2AddType text/html .py

    如果要在某个虚拟主机上启用python+wsgi支持,只需要在vhost的配置文件中加入

    1WSGIScriptAlias / /var/www/main.py/

    其中/var/www/main.py就是提供wsgi的主程序
    当然,一般程序都有静态文件支持,所以,您可能需要对某个目录下的文件跳过处理,如下

    1Alias /static   /var/www/static/

    如此即可.最后加上目录设置即可,对于上面的例子,完整的虚拟主机配置如下

    01ServerAdmin admin@xxx.com
    02DocumentRoot /var/www
    03ServerName xxx.com
    04ServerAlias www.xxx.com
    05WSGIScriptAlias / /var/www/main.py/
    06Alias /static   /var/www/static/
    07AddType text/html .py
    08ErrorLog /var/log/httpd/xxx_error.log
    09CustomLog "|/usr/bin/cronolog /var/log/httpd/xxx_access_%Y%m%d.log" custom1
    10 
    11 
    12Options Indexes FollowSymLinks
    13AllowOverride All
    14Order allow,deny
    15Allow from all

    这样就配置好了此站点的mod_wsgi支持.那么对于python程序,应该如何使用这样的配置工作呢?下面我们以webpy为例,考虑实际部署一个测试程序
    对于webpy,官方给出了wsgi的配置例子,具体参考:http://webpy.org/cookbook/mod_wsgi-apache/zh-cn
    在本文中,我们参考之后,实际的main.py内容如下:

    01#!/usr/bin/env python
    02import os
    03import sys
    04path = os.path.dirname(os.path.realpath(__file__))
    05sys.path.append(path)
    06  
    07import web
    08  
    09urls = (
    10        '/', 'index'
    11)
    12  
    13class index:
    14        def GET(self):
    15                return "Hello, I am Leven."
    16  
    17app = web.application(urls, globals())
    18curdir = os.path.dirname(__file__)
    19session = web.session.Session(app, web.session.DiskStore(curdir + '/' + 'sessions'),)
    20  
    21def session_hook():
    22        web.ctx.session = session
    23  
    24app.add_processor(web.loadhook(session_hook))
    25application = app.wsgifunc()

    稍微解释下,由于我们考虑是虚拟主机部署,因此服务器并未安装webpy,我们将webpy放入web目录下,因此,在使用的时候,必须将当前目录加入path才可以正常载入webpy模块,所有文件开头先将当前目录加入path.
    然后,由于web程序中会经常用到session,因此我们将session也加入到了程序中,具体存储路径在sessions目录下.

    将webpy目录和main.py上传到web根目录,然后访问,如果访问结果如下图,恭喜,您的配置已经成功.

  • 相关阅读:
    微软官方Windows Phone初学者开发视频系列从零开始带您轻松进入开发的世界
    Flash务实主义(五)——AS3的垃圾回收
    各种流行的编程风格
    程序设计的十个做与不做
    Android 上的 10 款 Web 开发工具推荐
    Flex 中的 DataGrid 自动刷新(转)
    Flex 序列化自定义类 解决 sharedObject 保存自定义对象
    Adobe更新手机应用开发工具 涵盖所有平台
    程序员的七大坏毛病
    怎样让失败变成成功之母?
  • 原文地址:https://www.cnblogs.com/lexus/p/2367076.html
Copyright © 2011-2022 走看看