2

我试图在 CherryPy 服务器上部署我的 Flask 应用程序。我喜欢它的简单和简约的本质。

所以我像下面这样对 CherryPy 进行 PIP'ed CherryPy

pip install CherryPy-15.0.0-py2.py3-none-any.whl

并编写了如下脚本 - 许多来源建议非常常见

from cherrypy import wsgiserver
from hello import app

d = wsgiserver.WSGIPathInfoDispatcher({'/': app})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 80), d)

if __name__ == '__main__':
   try:
      server.start()
   except KeyboardInterrupt:
      server.stop()

令我惊讶的是,我遇到了导入错误。经过几次谷歌搜索后,我了解到我必须将导入行更改为 cheroot 才能使其正常工作。

from cheroot.wsgi import Server
from cheroot.wsgi import PathInfoDispatcher

现在,我的代码工作正常。但是,如果这是使用 CherryPy WSGI 服务器的正确方法,或者我使用了错误版本的 CherryPy,我会感到有些困惑。我很困惑,因为 Cheroot 似乎已经有一年多的历史了(可以追溯到 2014 年),但是我在 CherryPy WSGI 服务器上找到的关于 Flask 的所有信息都在使用from cherrypy import wsgiserver,而不是from cheroot.wsgi import Server,甚至是最新的帖子。

这让我不确定我是否在做正确的事情。

有人可以阐明这种困惑吗?

4

1 回答 1

8

Cheroot ( src ) 是一个低级 HTTP 和 WSGI 服务器,它曾经是CherryPy ( src ) 的一部分,但不久前被分解成一个单独的 repo。所以前者cherrypy.wsgiserver已移至cheroot.wsgi模块。

它是完全可替换的,旨在允许开发人员在仅使用 WSGI 服务器时直接依赖 Cheroot,而不需要 CherryPy 的其他部分。

所以这里是你如何以与版本无关的方式使用它:

try:
    from cheroot.wsgi import Server as WSGIServer, PathInfoDispatcher
except ImportError:
    from cherrypy.wsgiserver import CherryPyWSGIServer as WSGIServer, WSGIPathInfoDispatcher as PathInfoDispatcher

from hello import app

d = PathInfoDispatcher({'/': app})
server = WSGIServer(('0.0.0.0', 80), d)

if __name__ == '__main__':
   try:
      server.start()
   except KeyboardInterrupt:
      server.stop()
于 2018-06-20T13:56:28.043 回答