使用 Bokeh 作为库时访问静态目录

Access static directory when using Bokeh as a library

我正在尝试制作一个散景服务器,为所有连接的人提供相同的视图。我已经能够使用 library mode 中的 Bokeh 使用以下代码实现此目的:

from tornado.ioloop import IOLoop
from bokeh.server.server import Server
from bokeh.plotting import curdoc

io_loop = IOLoop.current()
server = Server(applications={'/myapp': self.make_document},
                io_loop=io_loop,
                allow_websocket_origin=['{0}.com:5001'.format(
                    hostname.lower()), 'localhost:5001'],
                port=5001,
                )
  
server.start()
server.show('/myapp')
io_loop.start()

运行 和 python main.py,但是我无法访问静态目录 /myapp/static.

如果我改为:

self.make_document(curdoc())

并使用 bokeh server --show myapp 启动 myapp 我可以很好地访问静态,但每个新的浏览器选项卡连接都会获得一个新视图。

有没有办法在库模式下访问静态?或者一种为所有连接提供相同视图并仍然使用 bokeh document mode.

的方法

Bokeh Tornado Embed Example

中找到答案
from tornado.web import StaticFileHandler
from tornado.ioloop import IOLoop
from bokeh.server.server import Server
from bokeh.plotting import curdoc

io_loop = IOLoop.current()
server = Server(applications={'/myapp': self.make_document},
                io_loop=io_loop,
                allow_websocket_origin=['{0}.com:5001'.format(
                    hostname.lower()), 'localhost:5001'],
                port=5001,
                extra_patterns=[
                    (r'/mydir/(.*)', StaticFileHandler, {'path': 
                    os.path.normpath(os.path.dirname(__file__) + '/mydir')})],
                )
  
server.start()
server.show('/myapp')
io_loop.start()

这里 mydir 需要在 myapp 目录中而不是父目录中。