代码改变世界

Web.py Cookbook 简体中文版 - Web.py using FastCGI and Apache 2

2012-11-26 10:07  justjavac  阅读(195)  评论(0编辑  收藏  举报

Requirements

Note, on CentOS compiling mod_fcgid requires apache-devel be installed (available via yum).

Apache Configuration

Replace ‘/var/www/myapp/’ with the path to your apps directory

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule fcgid_module modules/mod_fcgid.so

SocketPath /tmp/fcgidsock
SharememPath /tmp/fcgid_shm

Alias /static "/var/www/myapp/static"
Alias / "/var/www/myapp/"
<Directory "/var/www/myapp/">
    allow from all
    SetHandler fcgid-script    
    Options +ExecCGI
    AllowOverride None
    <IfModule mod_rewrite.c>      
       RewriteEngine on
       RewriteBase /
       RewriteCond %{REQUEST_URI} !^/icons
       RewriteCond %{REQUEST_URI} !^/favicon.ico$
       RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
       RewriteRule ^(.*)$ code.py/$1 [PT]
    </IfModule>
</Directory>

<Directory "/var/www/myapp/static">
      allow from all
      AllowOverride None
      Options -ExecCGI
      SetHandler None
  </Directory>

Hello World

Note the following line is required: web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

#!/usr/bin/python

import web

urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello: 
    def GET(self):
    return 'Hello, world!'

web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
if __name__ == "__main__":
    app.run()

Run

  1. Start your server.
  2. Open your application with your browser
  3. To confirm your application is running try:

ps aux | grep code.py

Troubleshooting

 

Check your apache error log for information!

 

Common problems

 

File permissions.

You might see error code 255 in your logs. Ensure the directory is readable and that code. py is executable:

chmod +x code.py

404 Not Found.

Is your Alias path correct in your apache configuration?

Other problems

Web.py spawns http://0.0.0.0:8080, dies unexpectedly, or returns nothing. Did you add this line?

 web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

 

Misc

After updating your application you may need to restart your web server to see the changes.

无觅相关文章插件,快速提升流量