我的CherryPy应用程序在提供favicon时开始抛出错误500(参见下面的追溯)。起初只有少数计算机出现问题,现在所有计算机都出错了。我不认为我在Python应用程序上有任何改变,也许计算机配置发生了一些变化。
我无法调试错误,因为它无法在我的开发计算机上重现。在我的计算机上,它甚至没有到达生产服务器上崩溃的行。
这是配置(其他参数由其他模块添加,这是负责图标的起始配置):
config = {'global': {'server.socket_host': '0.0.0.0',
'server.socket_port': 80,
'log.error_file': 'log\\web.log',
'log.access_file': 'log\\access.log'},
'/favicon.ico': {'tools.staticfile.on': True,
'tools.staticfile.filename': os.path.dirname(__file__) + '\\favicon.ico'}}
这是追溯:
[08/Jan/2016:13:55:14] HTTP
Request Headers:
ACCEPT-LANGUAGE: en-US,en;q=0.8
COOKIE: DocFinder_Id=2dde47f7-c679-4c12-a5c5-0a8a214c47d6
CONNECTION: keep-alive
REFERER: http://intelliweb.universecorp.com/doc/tmp/808184425.pdf
ACCEPT-ENCODING: gzip, deflate
USER-AGENT: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Remote-Addr: 192.1.1.120
ACCEPT: */*
HOST: intelliweb.universecorp.com
[08/Jan/2016:13:55:14] HTTP Traceback (most recent call last):
File "C:\Python34\lib\site-packages\cherrypy\_cprequest.py", line 670, in respond
response.body = self.handler()
File "C:\Python34\lib\site-packages\cherrypy\lib\encoding.py", line 212, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "C:\Python34\lib\site-packages\cherrypy\_cpdispatch.py", line 61, in __call__
return self.callable(*self.args, **self.kwargs)
File "C:\Python34\lib\site-packages\cherrypy\_cptools.py", line 175, in handle_func
handled = self.callable(*args, **self._merged_args(kwargs))
TypeError: staticfile() got multiple values for argument 'filename'
192.1.1.120 - - [08/Jan/2016:13:55:14] "GET /favicon.ico HTTP/1.1" 500 1468 "http://intelliweb.universecorp.com/doc/tmp/808184425.pdf" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
答案 0 :(得分:1)
尝试更改此行:
'tools.staticfile.filename': os.path.dirname(__file__) + '\\favicon.ico'
到
'tools.staticfile.filename': os.path.join(os.path.dirname(__file__), 'favicon.ico')
另一种方法是从你的html(在标题部分)中提供你的favicon:
<link href="yourpath/favicon.ico" rel="icon" type="image/x-icon" />
答案 1 :(得分:0)
misakm的答案不正确,但帮我调试:问题是__file__
在开发计算机上是绝对的,在生产计算机上是相对的。我找到了原因here:
如果在当前目录中加载模块,则为当前目录 目录不在sys.path中,您将获得绝对路径。
如果在当前目录中加载模块,则为当前目录 目录在sys.path中,您将获得相对路径。
解决方案是像这样添加abspath
:
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'favicon.ico')
罪魁祸首是几周前在Windows环境中进行的一些维护,这些环境改变了PATH。