恐怕我对 Heroku 不熟悉,但我可以回答你的基本问题。
Gunicorn 是一个 HTTP 服务器,用于通过 WSGI 运行 Python Web 应用程序。 web.py 是一个使用 WSGI 创建 Python Web 应用程序的框架。
因此,您实际上并不需要一起使用两者的教程,因为您所需要做的就是弄清楚如何将 web.py 应用程序的 WSGI 入口点传递给gunicorn。 WSGI 应用程序只是一个具有正确接口的 Python 可调用程序,即它接受某些参数并返回某个响应。看这个 WSGI 教程 http://webpython.codepoint.net/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 通过以下方式提供 WSGI 应用程序wsgifunc
的方法web.application http://webpy.org/docs/0.3/api#web.application。我们可以通过在后面添加以下内容来将其添加到 test.pyindex
class:
# For serving using any wsgi server
wsgi_app = web.application(urls, globals()).wsgifunc()
这基本上就是 web.py 文档告诉您在使用时在部署部分中执行的操作Apache + mod_wsgi http://webpy.org/cookbook/mod_wsgi-apache- 事实上,Gunicorn 的 Python 代码与我们相同并不是巧合,因为这正是 WSGI 为您提供的 - 一种编写 Python 的标准方法,以便可以使用任何支持 WSGI 的服务器来部署它。
正如中所解释的Gunicorn 文档 http://docs.gunicorn.org/en/latest/run.html#gunicorn,然后我们可以将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