在dotcloud上使用wsgi的Web.py
我正在尝试把我的 web.py 应用部署到 dotcloud 上,但不知道该怎么做。
我看过这个教程,感觉还不错: http://docs.dotcloud.com/static/tutorials/firststeps/
然后我又查看了 http://docs.dotcloud.com/static/components/python/ ...
Python 服务可以托管任何符合 WSGI 标准的 Python 网络应用。
这包括所有现代的 Python 网络框架:Django、Pylons、web.py、web2py 等等。
...
Python 是通过 Nginx + uWSGI 运行的,由 supervisord 管理。静态资源直接由 Nginx 提供,这样性能更好。
...
DotCloud 依赖一些成熟的工具和约定来构建你的应用。把任何应用适配到 DotCloud 上应该是很简单的。
...
在部署你的应用时,DotCloud 会寻找一个叫做 wsgi.py 的文件。确保在你的应用目录的根目录下创建这个文件。
在网上搜索 "web.py wsgi" 会找到 http://webpy.org/install,上面有一堆让人困惑的说明。我尝试了页面上的几个建议,但都没能成功。
看起来最有希望的办法是创建一个叫 wsgi.py 的文件,内容如下:
import web
urls = (
'/(.*)', 'hello'
)
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc()
我还在旁边创建了一个空的 __init__.py
文件。
然后我做了:
dotcloud create jca_hello.py
dotcloud deploy -t python jca_hello.www
dotcloud push jca_hello.www .
但是现在当我访问 http://www.jca_hello.dotcloud.com/ 时,我看到的只是:
uWSGI 错误
wsgi 应用未找到
有什么想法吗?
1 个回答
我也是web.py的用户,顺便说一下,我在DotCloud工作:-)
我们使用uWSGI来运行你的WSGI应用。关键是uWSGI在寻找一个叫“application”的变量。
以下是我通常的做法:
app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
else:
web.config.debug = False
application = app.wsgifunc()
这样你就可以在本地机器上继续使用你的应用:
$ python ./wsgi.py
同时也可以把它推送到生产环境(当然是在DotCloud上;)并且关闭调试模式。
这是你修正后的wsgi.py文件:
import web
urls = (
'/(.*)', 'Hello'
)
class Hello(object):
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
app = web.application(urls, globals())
if __name__ == '__main__':
app.run()
else:
web.config.debug = False
application = app.wsgifunc()
要确保你的wsgi.py文件放在你的应用根目录下。
另外,确保你的应用根目录里有一个名为“requirements.txt”的文件,里面包含:
web.py
如果在部署过程中遇到任何问题,随时可以联系DotCloud的支持团队。