WindowsPythonApachewsgi
Windows+Python+Apache+wsgi
刚用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
这时,我到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))
再启动,终于可以看到正常的页面了,我泪流满面啊!