flask - 为什么我的烧瓶应用程序上的小部件在本地显示时没有显示在 EC2 实例上?
问题描述
我正在尝试使用弹性 beantalk 在 aws EC2 实例上部署烧瓶应用程序。flask 应用程序提供了一个 Bokeh 小部件,该小部件被读入 Jinja2 模板。
在我的本地机器上运行,我使用 app.run(host='0.0.0.0', port=8000) 运行烧瓶应用程序。我在“ http://localhost:5006/widget ”为小部件创建了一个服务器文档。当我打开http://localhost:8000时,页面会使用小部件呈现。我也可以打开 localhost:5006/widget,我会自己看到这个小部件。
现在,当我在弹性 beanstalk 上部署它时,我将小部件的服务器文档更改为 ':5006/widget' 并在 host= 上运行应用程序。如果我在浏览器中打开“:5006/widget”,它会再次向我显示我的小部件,该小部件会按应有的方式进行交互。但是,当我转到它时,会显示一个呈现所有 html 的页面,但该小部件不可见。此外,当我与修改小部件的页面交互时,我可以转到 :5006/widget 并且更改将显示在小部件上。小部件似乎可以正常工作并且可以与网页交互,但我只是不知道为什么小部件不会显示在主页上。
我在 5006 和 8000 上为 tcp 打开了入站端口,控制台中没有显示任何错误。什么可能阻止小部件显示?
编辑:试图澄清应用程序是如何嵌入的:
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 | 安全 }} 行。在本地运行我使用 server_document(' http://localhost:5006/widget ') 和 app.run(host=0.0.0.0, port=5000)。
编辑:正如 bigreddot 指出的,如果页面的 url 使用 https,则源必须使用 https。
解决方案
推荐阅读
- html - 当 URL 不变时,Beautiful Soup (Python) 中的分页
- haskell - 在 Scotty / WAI 中完全发送响应后如何运行操作
- plotly - 如何使用 Go.Scattergeo 仅显示一种状态?
- html - 电话号码的 HTML 模式
- vue.js - 哪个移动应用程序框架支持 konva
- firebase - Flutter > 提供者 > Firebase | 不能流式传输一个对象,但另一个流式传输良好,并且它们都非常相似
- php - 将实时 yii2 网站转移到 localhost
- flutter - 使用 StreamProvider 时出错(找不到正确的 Provider
- > 在此 AllBuildings 小部件上方)
- perl - Perl 哈希:$hash{key} 与 $hash->{key}
- rust - 就我的 PDP 模拟器的数据结构建模寻求建议