Windows+Python+Apache+wsgi

来源:互联网 发布:数据分析报告怎么 编辑:程序博客网 时间:2024/05/16 19:00

刚用Python作为后台语言做了一个网站,测试服务器是Windows的,把网站发布到这台服务器上,可花了我好些时间。把遇到的问题在这里作个记录。

第一步、下载安装Apache2.2

第二步、下载安装Python2.7

第三步、为Apache配置wsgi模块

1、下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/    搜索wsgi,对应好python版本

2、解压,将mod_wsgi.so放到apache的modules目录下

3、配置,打开Apache目录下的conf\httpd.conf,搜索LoadModule位置,在后面加上

       LoadModule wsgi_module modules/mod_wsgi.so

第四步、把项目拷贝到服务器的任意目录下,如C:\www-data\projectname ,并在conf\httpd.conf文件中搜索DocumentRoot位置,后面加上:

WSGIScriptAlias / "C:/www-data/projectname/application.py"

# 此处application.py要改成自己项目启动的py文件名

<Directory "C:/www-data/projectname">

Order deny,allow

Allow from all

</Directory>


这时,我到Windows的服务里试图启动Apache,结果报错说:

Windows不能从本地计算机启动服务,请联系厂商什么什么的。。搞得我一头雾水,后来看了一下Apache目录下的logs,

发现报错信息:

can not load mod_wsgi.so

还有:ImportError: No module named site


到网上搜了一下,可能是因为Python的环境没有配好,于是添加环境变量 PYTHONPATH,值为Python的安装路径,如C:\Python27


再启动,报错:

can not import web,因为我用到的webpy,mysqldb等插件还没有下载安装呢。

我下载了mysqldb 的 tar格式文件,回来解压,想通过python setup.py install 的方式安装,但是安装报错:

cannot open include file:'config-win.h': No such file or directory

怎么办呢?看网上的解决方法五花八门,好像都不简单。后来,我重新下载了exe格式的mysqldb,直接运行安装,嘿!就可以了!


我再启动,开始报程序里面的错误了,No module named url。

url 是我自己写的Module,但明明在那个位置,它就是找不到,于是在启动程序的application.py 顶部加上两句:

import sys, os 

sys.path.append(os.path.dirname(__file__))


再启动,报错说TemplateNotFound

我用的jinja2作为模板工具,八成又是路径的问题,它找不到我的模板。于是修改代码

render_jinja(‘/templates', encoding='utf-8')为

render_jinja(os.path.normpath(os.path.dirname(__file__) + '../templates'), encoding='utf-8')


再启动,终于看到不报错的页面了。但是它直接显示的Html代码,而不是页面!!

看一下响应头信息:context-type: text/plain, 怎么Apache把页面当成文本直接返回了??网上搜了一下,大概是Apache与wsgi之间的什么问题。。没时间看那么多了,不如自己在代码里给设置一下响应头好了。于是加上一段预处理的代码(这是webpy相关的代码):

webapp = web.application(urls, globals())

def my_loadhook():    

web.header('Content-type', "text/html; charset=utf-8")

webapp.add_processor(web.loadhook(my_loadhook))


再启动,终于可以看到正常的页面了,我泪流满面啊!