我的问题基本上是标题中的内容:如何设置 gunicorn 来运行 web.py 应用程序? (另外,如果有任何差异,我将如何在 heroku 上做到这一点?)

我已经使用内置的cherrypy 在heroku 上运行了我的应用程序,但是我无法让gunicorn 与web.py 一起工作(我只是不知道从哪里开始——我找不到任何教程)。

最佳答案

恐怕我不熟悉 Heroku,但我可以回答您的基本问题。

gunicorn 是一个 HTTP 服务器,用于通过 WSGI 运行 Python Web 应用程序。 web.py 是一个使用 WSGI 创建 Python Web 应用程序的框架。

因此,您实际上并不需要同时使用两者的教程,因为您需要做的就是弄清楚如何将 web.py 应用程序的 WSGI 入口点传递给 gunicorn。 WSGI 应用程序只是一个具有正确接口(interface)的可调用 Python,即它接受某些参数并返回某个响应。有关更多信息,请参阅 this WSGI tutorial

web.py 教程中的“hello world”应用程序看起来像这样的 test.py:

import web

urls = (
    '/', 'index'
)

class index:
    def GET(self):
        return "Hello, world!"

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

但这并没有暴露 gunicorn 需要的 WSGI 应用程序。

web.py 通过 wsgifunc web.application 方法提供了一个 WSGI 应用程序。我们可以通过在 index 类之后添加以下内容来将其添加到 test.py 中:
# For serving using any wsgi server
wsgi_app = web.application(urls, globals()).wsgifunc()

这基本上是 web.py 文档在部署部分告诉您在使用 Apache + mod_wsgi 时要做的事情 - Python 代码与 gunicorn 相同的事实并非巧合,因为这正是 WSGI 为您提供的 - 一个标准编写 Python 的方法,以便可以使用任何支持 WSGI 的服务器进行部署。

gunicorn docs 中所述,我们可以将 gunicorn 指向 wsgi_app 模块的 test 成员,如下所示:
(tmp)day@office:~/tmp$ gunicorn test:wsgi_app
2012-12-03 23:31:11 [19265] [INFO] Starting gunicorn 0.16.1
2012-12-03 23:31:11 [19265] [INFO] Listening at: http://127.0.0.1:8000 (19265)
2012-12-03 23:31:11 [19265] [INFO] Using worker: sync
2012-12-03 23:31:11 [19268] [INFO] Booting worker with pid: 19268

关于python - web.py 和 gunicorn,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13667103/

10-12 07:35
查看更多