通过 DispatchedMiddleWare 和 ReverseProxy 的 Dash 和 Flask 集成不起作用
Dash and Flask Integration through DispatchedMiddleWare and ReverseProxy not working
我正在尝试通过 Dash 将仪表板与成熟的 Flask 应用程序集成。我尝试了多条路线 including these methods,但无济于事。我的主要应用程序 运行s 通过反向代理,也有一个密钥。我做错了什么方法。对我来说,我的目标是让 DAsh 应用程序在 Flask 应用程序中 运行 并作为一个单独的应用程序并排作为最后的手段。
wsgi.py
from werkzeug.wsgi import DispatcherMiddleware
"""Implements the application for deployment"""
from flask.mainapp import mainapp as mainapp
from dashboard import dashapp as dashapp
mainapp.secret_key = os.getenv('SECRET_KEY', 'dev')
dashapp.secret_key = mainapp.secret_key
applicaton = DispatcherMiddleware(mainapp, {
'/admin/dashboard':dashapp.server,
})
dashboard.py
import dash
import plotly.express as px
import dash_core_components as dcc
import dash_html_components as dhtml
import plotly.graph_objects as go
import dash_bootstrap_components as dbc
#def create_dashboard(server):
"""Create a Plotly Dash dashboard."""
dashapp = dash.Dash( __name__,#server=server,
requests_pathname_prefix='/admin/dashboard/',
routes_pathname_prefix='/admin/dashboard/',
external_stylesheets=[dbc.themes.BOOTSTRAP],
serve_locally = False
)
# Create Dash Layout
dashapp.layout = dhtml.Div(children=[dhtml.H1(children='Hello Dash')])
#return dash
mainapp.py
#Libraries
from flask import *
from flask import stream_with_context
from werkzeug.utils import secure_filename
from werkzeug.datastructures import Headers
from werkzeug.wrappers import Response
from ReverseProxy import *
##Reverse Proxy line
mainapp.wsgi_app = ReverseProxied(mainapp.wsgi_app,script_name=mainapp.config["APPLICATION_ROOT"])
Bootstrap(mainapp)
#Main way to start application and host
if __name__ == '__main__':
#Uncomment for non reverse proxy and comment the next line
mainapp.run(host='0.0.0.0', port=5000, debug = False)
谢谢。
编辑这里是加载页面后出现的错误:
我要 post 我想出的答案。简而言之,在进行反向代理时,尤其是挂载到具有应用程序根目录的 URL 时,您必须在配置中包含 Dashapp 挂载之前使用 URL 更改配置。那么让我们从原始的 dash 应用程序开始吧。
dashapp = dash.Dash(__name__, server=server,
url_base_pathname='/admin/dashboard/',
external_stylesheets=[dbc.themes.BOOTSTRAP],
# static='/gambler/static',
# assets_folder= "/admin/dashboard/assets/",
# serve_locally = False
)
所以现在最重要的是:Dash 不知道如何根据 Flask 的应用程序根目录(即 Flaskapp['APPLICATION_ROOT'])安装文件来提供文件,所以你必须执行应用程序根目录 URL 在路线的其余部分之上:
dashapp.config.update({
"routes_pathname_prefix": '/[APPLICATION_ROOT]/admin/dashboard/',
'requests_pathname_prefix': '/[APPLICATION_ROOT]/admin/dashboard/'
})
这应该适用于那些使用应用程序根以及反向代理的人。
我正在尝试通过 Dash 将仪表板与成熟的 Flask 应用程序集成。我尝试了多条路线 including these methods,但无济于事。我的主要应用程序 运行s 通过反向代理,也有一个密钥。我做错了什么方法。对我来说,我的目标是让 DAsh 应用程序在 Flask 应用程序中 运行 并作为一个单独的应用程序并排作为最后的手段。
wsgi.py
from werkzeug.wsgi import DispatcherMiddleware
"""Implements the application for deployment"""
from flask.mainapp import mainapp as mainapp
from dashboard import dashapp as dashapp
mainapp.secret_key = os.getenv('SECRET_KEY', 'dev')
dashapp.secret_key = mainapp.secret_key
applicaton = DispatcherMiddleware(mainapp, {
'/admin/dashboard':dashapp.server,
})
dashboard.py
import dash
import plotly.express as px
import dash_core_components as dcc
import dash_html_components as dhtml
import plotly.graph_objects as go
import dash_bootstrap_components as dbc
#def create_dashboard(server):
"""Create a Plotly Dash dashboard."""
dashapp = dash.Dash( __name__,#server=server,
requests_pathname_prefix='/admin/dashboard/',
routes_pathname_prefix='/admin/dashboard/',
external_stylesheets=[dbc.themes.BOOTSTRAP],
serve_locally = False
)
# Create Dash Layout
dashapp.layout = dhtml.Div(children=[dhtml.H1(children='Hello Dash')])
#return dash
mainapp.py
#Libraries
from flask import *
from flask import stream_with_context
from werkzeug.utils import secure_filename
from werkzeug.datastructures import Headers
from werkzeug.wrappers import Response
from ReverseProxy import *
##Reverse Proxy line
mainapp.wsgi_app = ReverseProxied(mainapp.wsgi_app,script_name=mainapp.config["APPLICATION_ROOT"])
Bootstrap(mainapp)
#Main way to start application and host
if __name__ == '__main__':
#Uncomment for non reverse proxy and comment the next line
mainapp.run(host='0.0.0.0', port=5000, debug = False)
谢谢。
编辑这里是加载页面后出现的错误:
我要 post 我想出的答案。简而言之,在进行反向代理时,尤其是挂载到具有应用程序根目录的 URL 时,您必须在配置中包含 Dashapp 挂载之前使用 URL 更改配置。那么让我们从原始的 dash 应用程序开始吧。
dashapp = dash.Dash(__name__, server=server,
url_base_pathname='/admin/dashboard/',
external_stylesheets=[dbc.themes.BOOTSTRAP],
# static='/gambler/static',
# assets_folder= "/admin/dashboard/assets/",
# serve_locally = False
)
所以现在最重要的是:Dash 不知道如何根据 Flask 的应用程序根目录(即 Flaskapp['APPLICATION_ROOT'])安装文件来提供文件,所以你必须执行应用程序根目录 URL 在路线的其余部分之上:
dashapp.config.update({
"routes_pathname_prefix": '/[APPLICATION_ROOT]/admin/dashboard/',
'requests_pathname_prefix': '/[APPLICATION_ROOT]/admin/dashboard/'
})
这应该适用于那些使用应用程序根以及反向代理的人。