Сервер Flask + Bokeh в службе веб-приложений Azure

Я хочу разместить свое серверное приложение с эффектом боке в службах веб-приложений Azure. Следуя примеру в 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. На самом деле, мне еще не ясно, работает ли сервер боке или разрешен ли он вообще. В функции server_document я попытался поставить server_document("<my-azure-site>:5006/bkapp"), но проблема осталась прежней.

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

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

Связанный с вами вопрос больше не существует. Вы (или кто-то еще читал это) когда-нибудь находили решение?

Thomas 03.04.2019 15:34

Вы нашли здесь какое-нибудь решение?

Andi Anderle 03.07.2019 19:23
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
2
777
1

Ответы 1

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


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

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

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

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

Другие вопросы по теме