CherryPy не может найти файлы в статическом каталоге, если приложение не смонтировано в корневом каталоге. - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь предоставить html-файл, который включает в себя некоторые CSS и Javascript из статического каталога, используя cherryPy. Когда я монтирую приложение в root cherrypy.tree.mount(noVNC(), '/', conf), оно работает нормально, но когда я монтирую что-либо кроме этого (например, cherrypy.tree.mount(noVNC(), '/notroot', conf), я получаю 404 ошибки, когда браузер пытается получить включенные скрипты, даже если кажется, что он смотрит вправильный каталог. HTML подается просто отлично, вероятно, потому что я непосредственно читаю его в скрипте Python.

Структура файла

noVNCserver.py
noVNCstatic/
  vnc.html
  custom.js
  css/
    styles.css

Мой код:

noVNCserver.py

import os

import cherrypy

class noVNC(object):
    @cherrypy.expose
    def index(self):
        with open('noVNCstatic/vnc.html') as f:
            html = f.read()
        return html

if __name__ == '__main__':
    conf = {
        '/': {
            'log.error_file': '',
            'log.access_file': '',
            'tools.staticdir.root': os.path.abspath(os.getcwd()),
        },
        '/static': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': './noVNCstatic'
        }
    }

    cherrypy.server.socket_host = '0.0.0.0'
    cherrypy.server.socket_port = 8050
    cherrypy.tree.mount(noVNC(), '/notroot', conf)
    cherrypy.engine.start()
    cherrypy.engine.block()

vnc.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>noVNC</title>

    <meta charset="utf-8">

    <link href="/static/css/styles.css" rel="stylesheet">

    <script type="module" src="/static/custom.js"></script>

</head>

<body>
  <div>
    <p>stuff</p>
  </div>
</body>

Когда браузер пытается получить, например, файл styles.css, он отправляет запрос GET на http://localhost:8050/static/css/styles.css иполучает ошибку 404 not found, аналогично custom.js. Я попытался включить отладку staticdir: при монтировании в root я получаю сообщения в журнале, сообщающие, что staticdir правильно получает запрошенные файлы из статического каталога;монтирование на что-то, кроме root, я просто ничего не получаю в журнале, кроме начального успешного GET для html-файла.

...