0

CherryPyによる静的ファイルの処理に苦労しています。問題は、URLの末尾のスラッシュの処理に関係しています。欠落しているスラッシュが追加される場合と追加されない場合があります。動作は予測できません。そこにはバグが潜んでいると私は確信しています。静的ファイルを追加または削除すると、バグが発生するようです。スラッシュを処理する関数に未確定の状態を作成する初期化されていない変数が存在する可能性があるようです。問題を示す最小限のアプリケーションをまとめました(少なくとも私のマシンでは)。Ubuntu12.10でCherryPy3.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を読みましたが、これは同様の問題がありますが、ルートを使用しています。ルートは使用しません。

4

1 に答える 1

0

一時的な解決策

ここに示す一時的な解決策では、CherryPy ソース ファイルの 1 つに小さなパッチを適用する必要があります。教えてくれた Felix Bonkoski に感謝します。Google 検索を行ったところ、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 に答える