我想使用CherryPy的WSGI服務器來提供靜態文件,如Using Flask with CherryPy to serve static files。接受答案的選項2看起來完全像我想要做的,但是當我嘗試使用靜態目錄處理程序時,我得到了一個KeyError
。KeyError與CherryPy WSGIServer服務靜態文件
我已經試過:
>>>> 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
正常工作?
我有同樣的問題,你設法解決它? – 2015-04-02 11:17:41
@ThomasTurner目前我有我的Flask應用程序服務靜態文件,就像在[這個SO回答](http://stackoverflow.com/a/20648053/2216621)。答案是這不如從服務器直接提供服務(CherryPy在這種情況下),所以我仍然希望有人能夠回答這個問題。 – 2015-04-02 17:20:24