0

我在 CherryPy 处理静态文件时遇到了困难。问题与处理 URL 的尾部斜杠有关。有时会添加缺少的斜线,有时则不会:行为是不可预测的。我确信那里潜伏着一个错误。当我添加或删除一些静态文件时,该错误似乎出现了。看起来可能有一个未初始化的变量在处理斜杠的函数中创建了一个未确定的状态。我已经整理了一个显示问题的最小应用程序(至少在我的机器中)。我在 Ubuntu 12.10 下使用 CherryPy 3.2.2。

import cherrypy

class Root(object): pass

conf = {
    '/':{
    'tools.staticdir.on': True,
    'tools.staticdir.dir': '/home/bob/www',
    'tools.staticdir.index': 'index.htm',
    'tools.staticdir.debug': True,
    },
}

cherrypy.tree.mount(Root(), '/', config=conf)
cherrypy.engine.start()
cherrypy.engine.block()

我的实验性静态文件夹(/home/bob/www)的结构非常简单:

/home/bob/www/index.htm         <-- This file is just <html><body>Hello</body></html>
/home/bob/www/dir/index.htm     <-- This files includes a <img src="picture.jpg"> tag in it
/home/bob/www/dir/picture.jpg   <-- Any picture will do

如果我浏览localhost:8080/dir/,结果页面会显示图像。
如果我浏览localhost:8080/dir,结果页面不会显示图像。

任何帮助,将不胜感激。也许我没有正确配置应用程序,因为我是 CherryPy 的新手。

谢谢,
鲍勃

PS我已经阅读了stackoverflow.com/questions/10276060,它有类似的问题,但使用了Routes。我不使用路由。

4

1 回答 1

0

临时解决方案

此处显示的临时解决方案需要对其中一个 CherryPy 源文件进行小补丁。我要感谢告诉我这件事的 Felix Bonkoski。我做了一些谷歌搜索,并在 bitbucket.org/cherrypy/cherrypy/issue/895/ 上找到了对它的引用。

以下是说明:

找到并编辑文件 static.py(在我的 Ubuntu 机器中,它位于 /usr/local/lib/python2.7/dist-packages/cherrypy/lib/static.py)。在函数 staticdir() 中,找到下面的行。它们位于该功能的末尾。

 if handled:
    request.is_index = filename[-1] in (r"\/")   <--- Line in question

编辑有问题的行,使其看起来像这样:

 if handled:
    request.is_index = True

并保存文件。

此时我重新启动了计算机,CherryPy 现在可以正常工作了,我认为它应该可以工作。

于 2013-01-27T01:47:51.020 回答