Web.py Cookbook 简体中文版 - Web.py using FastCGI and Apache 2
2012-11-26 10:07 justjavac 阅读(195) 评论(0) 编辑 收藏 举报Requirements
- Apache 2.x
- mod_fcgid
- mod_rewrite
- Flup
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
- Start your server.
- Open your application with your browser
- 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.