Сервер Flask + Bokeh в службе веб-приложений Azure - PullRequest
0 голосов
/ 17 октября 2018

Я хочу разместить свое приложение сервера bokeh в Azure Web App Services.Следуя примеру в flask_embed.py , я создал минимальный пример с серверным процессом bokeh, запущенным на localhost: 5006 и обслуживающим его с server_document по маршруту фляги.Локально, на моем компьютере, он работает нормально без каких-либо ошибок:

from threading import Thread

from bokeh.embed import server_document
from bokeh.server.server import Server
from bokeh.models.widgets import Select, Div
from bokeh.layouts import column

from flask import Flask
from flask import render_template
from tornado.ioloop import IOLoop

app = Flask(__name__)

# This is the bokeh page
def modify_doc(doc):
    dropdown = Select(title="Cities", options=["New York", "Berlin"])
    title_row = Div(text="Home Page")

    main_layout = column([
        title_row,
        dropdown
    ])

    doc.add_root(main_layout)
    doc.title = "My bokeh server app"

# This is the subprocess serving the bokeh page
def bk_worker():
    server = Server(
        {'/bkapp': modify_doc},
        io_loop=IOLoop(),
        allow_websocket_origin=["*"],
    )
    server.start()
    server.io_loop.start()


Thread(target=bk_worker).start()

# This is the flask route showing the bokeh page
@app.route("/", methods=["GET"])
def my_app():
    script = server_document("http://localhost:5006/bkapp")
    return render_template("embed.html", script=script, template="Flask")

Однако, когда я помещаю его в веб-приложение Azure, страница становится пустой, и при проверке страницы отображается сообщение об ошибке:

GET https://<my-azure-site>.azurewebsites.net:5006/bkapp/autoload.js?bokeh-autoload-element=0bfb1475-9ddb-4af5-9afe-f0c4a681d7aa&bokeh-app-path=/bkapp&bokeh-absolute-url=https://<my-azure-site>.azurewebsites.net:5006/bkapp net::ERR_CONNECTION_TIMED_OUT

Похоже, у меня нет доступа к локальному узлу удаленного сервера Azure.На самом деле, мне пока не ясно, работает ли сервер bokeh / разрешено ли вообще работать.В функции server_document я попытался поставить server_document("<my-azure-site>:5006/bkapp"), но проблема остается той же.

Любая помощь приветствуется.

Этот пост связан с другим вопросом: Боке встроено в колбу в лазурном веб-приложении

1 Ответ

0 голосов
/ 01 декабря 2018

Я понимаю, что это было некоторое время назад, но я потратил много часов в последние несколько дней, чтобы выяснить это, так что это для будущих людей:


Проблема в том, что server_document () просто создает тег <script>, который внедряется в шаблон jinja2, где он выполняется.

Локально это не проблема, потому что ваш сервер bokeh работает на локальном хосте ВАШЕЙ МАШИНЫ: 5006.Для демонстрации вы можете увидеть, что вы можете перейти непосредственно к localhost: 5006 / bkapp, чтобы увидеть свой документ bokeh.

После того, как вы разместите его в Azure, server_document () создает тот же сценарий, что и браузер.попытается выполнить - т. е. ваш браузер попытается выполнить тег <script>, который ссылается на localhost: 5006, за исключением того, что на localhost: 5006 ничего не выполняется, потому что ваше приложение bokeh фактически работает на сервере Azure сейчас.

Я не уверен, что лучший способ сделать это, но суть в том, что вам нужен server_document (), чтобы указать на сервер bokeh, который работает удаленно.Для этого вам нужно убедиться, что {your_remote_bokeh_server}: 5006. общедоступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...