You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dataiku环境下Flask嵌入Dash应用部署404错误求助

问题:Dataiku生产环境中Flask嵌入Dash应用出现404路由错误

本地按教程将Dash嵌入Flask应用运行正常,但部署到Dataiku生产环境后,页面可加载,但访问Dash应用时出现404错误:请求URL指向Dataiku前端地址https://dss-20eb47c0-dde60339-dku.eu-west-3.app.dataiku.io/dashapp/,而非正确的后端服务地址。

由于我的Dash应用依赖assets、pages文件夹及多个自定义模块,无法使用Dataiku内置的Dash WebApp功能(该功能不支持指定这些自定义文件夹),已调试3天仍未解决,求可行解决方案或替代架构/部署方案。

后端代码(Flask实例由Dataiku提供)

import dataiku
import pandas as pd
from flask import request, Flask
from dash import Dash, dash, html
from datetime import datetime 
import json  # 原代码遗漏该模块,需添加

server = app
dash_app = dash.Dash(server=server, routes_pathname_prefix="/dashapp/",)
dash_app.layout = html.Div("This is the dash app")

@server.route("/dashapp/")
def my(server):
    return dash_app.index()

@server.route("/firstcall")
def index():
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return json.dumps({"status": "ok", "data": current_time})

前端代码

const backendURL = dataiku.getWebAppBackendUrl("/firstcall");

window.onload = function() {
    var ifrm = document.createElement("iframe");
    ifrm.setAttribute("src", backendURL);
    document.body.append(ifrm);

    var link = document.createElement("a");
    link.href = "/dashapp/";
    link.textContent = "Go to Dash App";
    document.body.appendChild(link);
};

解决方案

1. 移除冲突的Flask路由

Dash会自动为routes_pathname_prefix指定的路径注册路由,手动定义的/dashapp/路由会导致冲突,删除以下代码:

@server.route("/dashapp/")
def my(server):
    return dash_app.index()

2. 生成正确的Dash后端URL

前端直接使用/dashapp/无法指向Dataiku的WebApp后端,需用dataiku.getWebAppBackendUrl()生成正确地址:

// 修改前端链接代码
var link = document.createElement("a");
link.href = dataiku.getWebAppBackendUrl("/dashapp/");
link.textContent = "Go to Dash App";
document.body.appendChild(link);

3. 配置Dash的请求路径前缀(关键)

在Dataiku环境中,WebApp后端有专属前缀,需为Dash设置requests_pathname_prefix,确保静态资源和API请求路径正确:

# 获取Dataiku WebApp的后端前缀
backend_prefix = dataiku.get_webapp_config().get("backendPrefix", "")

dash_app = dash.Dash(
    server=server,
    routes_pathname_prefix="/dashapp/",
    requests_pathname_prefix=f"{backend_prefix}/dashapp/"
)

4. 替代部署方案

若上述调整仍无法解决,可尝试:

  • 独立部署Dash:将Dash应用单独部署为独立服务,在Dataiku WebApp中通过iframe嵌入该服务的公开地址(需确保网络连通)
  • 自定义Dataiku插件:开发插件扩展内置Dash WebApp功能,支持加载自定义assets和pages文件夹

内容的提问来源于stack exchange,提问作者traderi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:04:52