2010-03-22 54 views
3

我有服務的靜態XML樣式陪從CherryPy的web應用程序的一些動態生成的輸出一些麻煩。即使我提供靜態文本文件的測試用例也失敗了。問題的CherryPy 3.1提供靜態文件

靜態文件blah.txt是在我的應用程序根目錄下的/static目錄。

在我的主網站文件(conesearch.py​​包含CherryPy的ConeSearch頁面處理程序類):

import conesearch 
cherrypy.config.update('site.config') 
cherrypy.tree.mount(conesearch.ConeSearch(), "/ucac3", 'ucac3.config') 
... 

而在site.config我有以下選擇:

[/] 
tools.staticdir.root: conesearch.current_dir 

[/static] 
tools.staticdir.on: True 
tools.staticdir.dir: 'static' 

其中current_dir = os.path.dirname(os.path.abspath(__file__))conesearch.py

但是,我簡單的測試頁面(從http://www.cherrypy.org/wiki/StaticContent直取)失敗,404:

def test(self): 
     return """ 
     <html> 
     <head> 
     <title>CherryPy static tutorial</title> 
     </head> 
     <body> 
     <a href="/static/blah.txt">Link</a> 
     </body> 
     </html>""" 
test.exposed = True 

它試圖訪問127.0.0.1:8080/static/blah.txt,其中由我估計應該是AOK。任何想法或建議?

乾杯,

西蒙

回答

3

我成爲這樣的靜態文件:

config = {'/static': 
       {'tools.staticdir.on': True, 
       'tools.staticdir.dir': PATH_TO_STATIC_FILES, 
       } 
     } 

cherrypy.tree.mount(MyApp(), '/', config=config) 
+1

沒有,我依然沒有歡樂。不過謝謝。仍在'blah.txt'上獲得404。如果我正確理解CherryPy配置文件/文件,這應該與我在上面設置的配置文件完全相同? – 2010-03-23 22:18:54

4

cherrypy.config.update只能接收單級字典(主要是server.*項),但你傳遞一個應該真的是每個應用程序(因此傳遞到tree.mount)的設置的多級字典。

[/][/static]部分從您的site.config文件移動到您的ucac3.config文件,它應該可以正常工作。

+0

哦,並將'Link'更改爲'Link'。 ;) – fumanchu 2010-03-23 22:53:21

+0

排序。完美的工作,謝謝。 – 2010-03-23 22:55:31

1

我有一個類似的設置。比方說,我希望我的網站的根是在http://mysite.com/site和我的網站/應用的根是在/路徑/到/ WWW

我在SERVER.CFG以下配置設置,我發現我的靜態文件沒有問題:

[global] 
... 
app.mount_point = '/site' 
tools.staticdir.root = '/path/to/www/' 
[/static] 
tools.staticdir.on = True 
tools.staticdir.dir = 'static' 

我服了道場文件等,從靜態目錄中沒有問題,以及CSS。我還使用genshi進行模板化,並使用cherrypy.url()調用來確保我的其他URL正確設置。這使我可以更改app.mount_point並更新我的鏈接。