车博仕 v30 升级:Nginx mod_wsgi webpy
来源:百度文库 编辑:九乡新闻网 时间:2024/05/07 13:19:35
最近在做一个项目是以结伴开发的模式来作的,最终两个人讨论一两个人都相对熟悉而且开发效率较高的python来开发,在web框架上最终抛弃了较为原始的直接cgi和较为臃肿的django,而选择了介于之间的webpy,webpy在使用了一段时间后发现,我们两个人都很喜欢使用而且用的是相当的顺手,后台环境就使用Nginx+mod_wsgi+webpy,也是非常流畅。现在把这个简单的‘复杂’环境搭建记录一下:
重点参考了nginx的官方文档:http://wiki.nginx.org/NgxWSGIModule的说明安装吧
下载nginx mod_wsgi webpy
http://nginx.net/
http://hg.mperillo.ath.cx/nginx/mod_wsgi/
http://webpy.org
nginx下载nginx-0.8.54.tar.gz,太新的版本mod_wsgi还不支持,就这个版本的也还是要打补丁才可以的,补丁文件在:
http://www.thechikun.com/depo/patch-mod_wsgi.txt
mod_wsgi下载后mod_wsgi-8994b058d2db.tar.gz
webpy下载的版本是:webpy-webpy-webpy-0.34-43-gfd2be24.tar.gz这个我下的是最新的版本
根据补丁文件修改后即可进行配置编译,进入nginx目录:
- ./configure —add-module=/path/mod_wsgi-8994b058d2db/ —prefix=/usr/local/nginx
- 这里还需要修改一下目录下'objs/Makefile'文件,取消掉一些编译warning设置,不然编译器会把warning也认为是error来处理。
- make
- sudo make install
安装完niginx后,还要在mod_wsgi-8994b058d2db中去安装一下这个:
- python setup.py --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf --sbin-path=/usr/local/nginx/sbin
然后配置nginx配置文件,在nginx.conf的http外面加上
- env HOME;
- env PYTHON_EGG_CACHE=/tmp; #设置一下pythonegg文件的零时解压目录
- http{
- ....
- }
这样就可以设置好python的路径问题.
下面给出一个完整的虚拟主机配置:
- server {
- listen 80;# 这个端口不要和其它server的端口冲突哦
- server_name test.zhwen
- index index.html index.py;
- root /home/helight/babycode/webpytest;
- include wsgi_vars;
- location / {
- wsgi_pass /home/helight/babycode/webpytest/src/main.py;
- #我是使用eclipse来开发的,所以这里把所有的py文件都放到了src下面
- wsgi_pass_authorization off;
- wsgi_script_reloading on;
- wsgi_use_main_interpreter on;
- }
- #这里把静态文件都放到了‘/home/helight/babycode/webpytest/static/’下,所以也指定了这个目录的访问,这个目录下既可以放图片,js,css,html等文件了
- location /static/ {
- expires 12h;
- }
- }
接下来些/home/helight/babycode/webpytest/src/main.py这个文件,就以官方的demo为例吧
- import os
- import web
- web.config.debug = False
- urls = (
- '/.*', 'hello',
- )
- class hello:
- def GET(self):
- return "Fuck The World..."
- app = web.application(urls, globals())
- curdir = os.path.dirname(__file__)
- session = web.session.Session(app, web.session.DiskStore(os.path.join(curdir+"../",'sessions')),)
- #这里是把sessions的位置指向了/home/helight/babycode/webpytest/
- application = app.wsgifunc()
这样启动ngnix后就可以http://test.zhwen/ 访问了;
再新建一个目录/home/helight/babycode/webpytest/static/,然后创建一个test.html的文件:
Fuck the world!!
以http://test.zhwen/static/test.html 访问
对于要在main.py中引人自己的模块的,还要加入这样的语句
- curdir = os.path.dirname(__file__)
- sys.path.append(curdir)
即把当前目录加入module的搜索路径,负责会出现无法加载模块的错误。