使用CherryPy提供favicon时出错500

时间:2016-01-08 23:14:11

标签: python cherrypy

我的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"

2 个答案:

答案 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。