8

我正在尝试在 dotcloud 上部署我的 web.py 应用程序,但不知道该怎么做。

我很好地完成了本教程:http: //docs.dotcloud.com/static/tutorials/firststeps/

然后我查看了http://docs.dotcloud.com/static/components/python/ ...

python 服务可以托管任何与 WSGI 标准兼容的 python web 应用程序。

这包括所有现代 Python Web 框架: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 应用程序

有任何想法吗?

4

1 回答 1

12

我是 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()

小心在你的 approot 中正确地拥有你的 wsgi.py。

还要确保您的 approot 中有一个名为“requirements.txt”的文件,其中包含:

web.py

同时,如果您对部署有任何问题,请随时联系 DotCloud 支持。

于 2011-03-09T06:35:39.300 回答