是谁要了成克杰的命:Nginx mod_wsgi webpy

来源:百度文库 编辑:西欧教育 时间:2020/02/25 14:56:36

最近在做一个项目是以结伴开发的模式来作的,最终两个人讨论一两个人都相对熟悉而且开发效率较高的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目录:

  1. ./configure —add-module=/path/mod_wsgi-8994b058d2db/ —prefix=/usr/local/nginx
  2. 这里还需要修改一下目录下'objs/Makefile'文件,取消掉一些编译warning设置,不然编译器会把warning也认为是error来处理。
  3. make
  4. sudo make install

安装完niginx后,还要在mod_wsgi-8994b058d2db中去安装一下这个:

  1. python setup.py --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf --sbin-path=/usr/local/nginx/sbin

然后配置nginx配置文件,在nginx.conf的http外面加上

  1. env HOME;
  2. env PYTHON_EGG_CACHE=/tmp; #设置一下pythonegg文件的零时解压目录
  3. http{
  4. ....
  5. }

这样就可以设置好python的路径问题.
下面给出一个完整的虚拟主机配置:

  1. server {
  2. listen 80;# 这个端口不要和其它server的端口冲突哦
  3. server_name test.zhwen
  4. index index.html index.py;
  5. root /home/helight/babycode/webpytest;
  6. include wsgi_vars;
  7.  
  8. location / {
  9. wsgi_pass /home/helight/babycode/webpytest/src/main.py;
  10. #我是使用eclipse来开发的,所以这里把所有的py文件都放到了src下面
  11. wsgi_pass_authorization off;
  12. wsgi_script_reloading on;
  13. wsgi_use_main_interpreter on;
  14. }
  15. #这里把静态文件都放到了‘/home/helight/babycode/webpytest/static/’下,所以也指定了这个目录的访问,这个目录下既可以放图片,js,css,html等文件了
  16. location /static/ {
  17. expires 12h;
  18. }
  19. }

接下来些/home/helight/babycode/webpytest/src/main.py这个文件,就以官方的demo为例吧

  1. import os
  2. import web
  3.  
  4. web.config.debug = False
  5.  
  6. urls = (
  7. '/.*', 'hello',
  8. )
  9.  
  10. class hello:
  11. def GET(self):
  12. return "Fuck The World..."
  13. app = web.application(urls, globals())
  14.  
  15. curdir = os.path.dirname(__file__)
  16. session = web.session.Session(app, web.session.DiskStore(os.path.join(curdir+"../",'sessions')),)
  17. #这里是把sessions的位置指向了/home/helight/babycode/webpytest/
  18. application = app.wsgifunc()

这样启动ngnix后就可以http://test.zhwen/ 访问了;
再新建一个目录/home/helight/babycode/webpytest/static/,然后创建一个test.html的文件:

  1. Fuck the world!!

以http://test.zhwen/static/test.html 访问
对于要在main.py中引人自己的模块的,还要加入这样的语句

  1. curdir = os.path.dirname(__file__)
  2. sys.path.append(curdir)

即把当前目录加入module的搜索路径,负责会出现无法加载模块的错误。