Почему виджет в моем приложении-фляге не отображается на экземпляре EC2, а на локальном? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь развернуть приложение фляги на экземпляре aws EC2, используя эластичный бобовый стебель. Приложение фляги отображает виджет Bokeh, который считывается в шаблон Jinja2.

На своем локальном компьютере я запускаю приложение фляги с app.run (host = '0.0.0.0', port = 8000). Я создаю документ сервера для виджета в 'http://localhost:5006/widget'. Когда я открываю http://localhost:8000, страница отображается с виджетом. Я также могу открыть localhost: 5006 / widget, и я увижу виджет самостоятельно.

Теперь, когда я иду и развертываю его на эластичном beanstalk, я изменяю документ сервера виджета на ': 5006 / widget' и запускаюприложение на хосте =. Если я открою ': 5006 / widget' в браузере, он снова покажет мне мой виджет, который взаимодействует как следует. Тем не менее, когда я иду к нему будет отображаться страница, которая отображает все HTML, но виджет не виден. Кроме того, когда я взаимодействую со страницей, на которой изменяется виджет, я могу перейти к: 5006 / виджет, и изменения будут отображаться в виджете. Кажется, что виджет работает так, как должен, и может взаимодействовать с веб-страницей, но я просто не могу понять, почему виджет не будет отображаться на главной странице.

Я открыл входящие порты дляTCP на 5006 и 8000, и в консоли не отображаются ошибки. Что может препятствовать отображению виджета?

Редактировать: Пытаться уточнить, как встроено приложение:

doc = bokeh.plotting.curdoc()
def createWidget(doc):
    p = figure(...)
    doc.add_root(p)

@app.route('/', methods=['GET', 'POST'])
def bkapp_page():
    widget = server_document('<ec2-ip>:5006/widget')
    return render_template("index.html", widget=widget, template="Flask")

def bk_worker():
    server = Server({'/widget': createWidget, io_loop=IOLoop(), allow_websocket_origin=["*"])
    server.start()
    server.io_loop.start()

from threading import Thread
thread = Thread(target=bk_worker)
thread.start()

if __name__ == '__main__':
    app.run(host=<ec2-ip>, port=5000)

Затем в index.html у меня есть {{widget |safe}} line. Работая на локальном компьютере, я использую server_document ('http://localhost:5006/widget') и app.run (host = 0.0.0.0, port = 5000).

Edit: как указало bigreddot, источник должен использовать https, еслиURL для страницы использует https.

...