【发布时间】:2015-03-30 20:58:46
【问题描述】:
我正在尝试使用 CherryPy 的 WSGI 服务器来提供静态文件,例如 Using Flask with CherryPy to serve static files。已接受答案的选项 2 看起来与我想做的完全一样,但是当我尝试使用静态目录处理程序时,我得到了 KeyError。
我尝试过的:
>>>> import cherrypy
>>>> from cherrypy import wsgiserver
>>>> import os
>>>> static_handler = cherrypy.tools.staticdir.handler(section='/', dir=os.path.abspath('server_files')
>>>> d = wsgiserver.WSGIPathInfoDispatcher({'/': static_handler})
>>>> server = wsgiserver.CherryPyWSGIServer(('localhost', 12345), d)
>>>> server.start()
然后,当我尝试访问服务器时,我在控制台中收到 500 响应和以下错误:
KeyError('tools',)
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/cherrypy/wsgiserver/wsgiserver2.py", line 1353, in communicate
req.respond()
File "/Library/Python/2.7/site-packages/cherrypy/wsgiserver/wsgiserver2.py", line 868, in respond
self.server.gateway(self).respond()
File "/Library/Python/2.7/site-packages/cherrypy/wsgiserver/wsgiserver2.py", line 2267, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "/Library/Python/2.7/site-packages/cherrypy/wsgiserver/wsgiserver2.py", line 2477, in __call__
return app(environ, start_response)
File "/Library/Python/2.7/site-packages/cherrypy/_cptools.py", line 175, in handle_func
handled = self.callable(*args, **self._merged_args(kwargs))
File "/Library/Python/2.7/site-packages/cherrypy/_cptools.py", line 102, in _merged_args
tm = cherrypy.serving.request.toolmaps[self.namespace]
KeyError: 'tools'
每次我尝试点击服务器应该能够显示的任何内容时,都会显示两次。当我将 Flask 应用程序连接到服务器时,Flask 应用程序按预期工作,但静态文件服务仍然给出相同的错误。
我需要做什么才能让staticdir.handler 工作?
【问题讨论】:
-
我遇到了同样的问题,你解决了吗?
-
@ThomasTurner 目前我正在让我的 Flask 应用程序提供静态文件,例如 this SO answer。答案说这不如直接从服务器(在这种情况下为 CherryPy)提供它,所以我仍然希望有人能够回答这个问题。
标签: python python-2.7 cherrypy