2017-07-17 57 views
0

我想使用CherryPy服務靜態文件,但我無法做到。我已經看過教程,但設置它也不能正常工作。在CherryPy中服務靜態目錄

所有這一切都是用Python 3.4

配置

config = { 
     '/ws': { 
      'tools.websocket.on': True, 
      'tools.websocket.handler_cls': ChatWebSocketHandler, 
      'tools.websocket.protocols': ['toto', 'mytest', 'hithere'] 
     }, 
     '/assets': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': constants.TEMPLATE_PATH 
     }, 
    } 

我開始了CherryPy的這樣

app_root = Root(args.host, args.port, args.ssl, ssl_port=args.ssl_port) 
cherrypy.quickstart(app_root, '', config=config) 

恆路徑

TEMPLATE_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)),"assets/") 

我試過使用像assets//assets/這樣的路徑,而不是上面的常量。

事情是它不承認他們中的任何人,總是給出404錯誤。

+0

您的配置如上所述。我有一個幾乎相同的應用程序之一。你需要使用tools.staticdir.dir的絕對路徑 - 你有。唯一的區別是我使用cherrypy.tree.mount(Root(),「/」,config),然後使用cherrypy.engine.start(),然後使用cherrypy.engine.block()而不是快速入門。你有沒有檢查權限是正確的? –

回答

1

我也很難設置這個。我有一個相當複雜的安裝程序,其中包含多個子域,這些子域已經通過CherryPy的幾個早期版本演變而來,而這些早期版本可能不再有效,而且我還沒有驗證過這個功能是否適用於此處的簡單快速入門配置。然而,實際上適用於我的設置中的關鍵線是將下面的配置行放在您裝入的web服務對象中。我把配置字典放在任何資源之前,在類定義中定義靜態目錄。它看起來像你已經在配置字典中定義了靜態目錄,而不是特定的資源而不是對象。因此,也許嘗試在託管服務對象:

class WebService(object): 
    _cp_config = { 
        'tools.staticdir.on': True, 
        'tools.staticdir.dir': '/path/to/serve/static/files/from' 
        } 

    @cherrypy.expose 
     def index(self): 

    [ ...additional resource definitions, etc ...] 

再後來就:

my_cp_app = 
    cherrypy.tree.mount(subDomain.WebService(), 
         '/subdomainFileLocation', 
         subdomainConfigDict) 

    cherrypy.quickstart(config=domainConfig) 

我知道你的工作的Python 3,這上面的作品,我對Python 2.7版+ CherryPy的-8.1。 2。我希望這是有幫助的。