Я пытаюсь создать боке-сервер, который обеспечивает одинаковое представление для всех подключающихся людей. Мне удалось добиться этого с помощью 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())
И начните myapp
с помощью bokeh server --show myapp
Я могу получить доступ к статичным просто отлично, но каждая новая вкладка браузера, подключающаяся, получает новый вид.
Есть ли способ получить доступ к статике в режиме библиотеки? Или способ показать один и тот же вид всем подключающимся и при этом использовать режим документа боке.
Ответ найден в Пример встраивания торнадо с боке
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
, а не в родительском.