使用 python-livereload 无法正确提供字体

Fonts not being served correctly using python-livereload

我正在使用 Sphinx 构建文档项目。我创建了这个脚本来监视目录并在发生更改时触发 Sphinx 构建:

import os
import sys
from livereload import Server, shell

wd = os.path.dirname(sys.argv[0])

server = Server()

server.watch(wd, shell('make.bat clean && make.bat html', cwd=wd), delay=1)

server.serve(root='../_build/html', port=8000, host='localhost')

这很好用,但是主题 (ReadTheDocs) 中的所有网络字体都在使用 Content-Type: text/html 传输并且 Chrome 开发者控制台显示:

Failed to decode downloaded font: http://localhost:8000/_static/fonts/Lato-Regular.ttf
Failed to decode downloaded font: http://localhost:8000/_static/fonts/fontawesome-webfont.woff?v=4.2.0
Failed to decode downloaded font: http://localhost:8000/_static/fonts/Lato-Bold.ttf
Failed to decode downloaded font: http://localhost:8000/_static/fonts/RobotoSlab-Bold.ttf
Failed to decode downloaded font: http://localhost:8000/_static/fonts/RobotoSlab-Regular.ttf
Failed to decode downloaded font: http://localhost:8000/_static/fonts/fontawesome-webfont.ttf?v=4.2.0

但是,指向同一目录的本地 IIS 网站工作正常。我假设这是 TornadoServer 的问题 - 可能将未知的 MIME 类型默认为 text/html。有人对此有解决方案吗?

我使用 ASP.NET 文档作为起点:https://github.com/aspnet/Docs/。当遵循他们的贡献指南(使用 sphinx-autobuild)时,这有同样的问题。

Tornado 从 python 标准库的 mimetypes module 获取静态文件的 MIME 类型。您需要确保您的系统 mimetypes 数据库(通常 /etc/mime.types。您的问题表明您使用的是 Windows,这不是 Tornado 官方支持的平台。我不知道是否 Windows 甚至有一个等价物)包括您要提供的所有文件类型,或者用 mimetypes.add_type.

手动补充它