diff --git a/build.sh b/build.sh index 2161794..130dbc8 100755 --- a/build.sh +++ b/build.sh @@ -323,6 +323,32 @@ done [ -n "${LINKED_MODULES}" ] || die "未发现任何含 wwwroot/ 的 pbl_* 模块,模块 wwwroot 挂载为空" log "模块 wwwroot 软链挂载完成:${LINKED_MODULES}" +# ---- 8d. 平台基座包 wwwroot 挂载(软链)+ 可达性门禁(owner 2026-09-30 手动修复)---- +# 根因(Bug KMzNPfKwI7Byk2SzLR / Vt3D8nvlALCIbdye / CJijeS7Mz6UekBB_YwNuR / LSycNWkqDbOlAeqSSna5z): +# wheelhouse 基座 wheel 只含 .py(rbac wheel 14 文件、wwwroot=0),venv editable 安装使 Python +# 代码可达(healthz/dspy 200),但 rbac 登录页与 bricks dist(header.tmpl/bricks.js)等基座包 +# wwwroot 静态资源从未挂进应用 wwwroot/ → index.ui 渲染 /bricks/header.tmpl 时 fpath=None → +# processor None → be_call AttributeError → 根路径与 /rbac/user/login.ui 全 500。 +# 宿主 9090 正确参照即 wwwroot/rbac→pkgs/rbac/wwwroot、wwwroot/bricks→pkgs/bricks/dist 两条软链。 +# 定位方式(2026-09-30 pbl 用户实测):PKGS_DIR 经 editable 源运行时定位(→ scense/pkgs, +# pbl 可读 rbac/wwwroot/user/login.ui);bricks dist 全机唯一在 +# /d/pipeline/pipeline-app/pkgs/bricks/dist(scense/pkgs 下无 bricks),pbl 实测可读 header.tmpl。 +# 实测结果:挂载后 /rbac/user/login.ui=200、/=200、/healthz=200(平台约定登录路径是 +# /rbac/user/login.ui,非 /main/rbac/ 前缀——宿主实测 /main/ 前缀本身也 500)。 +BASE_PKGS_DIR="$("${PY}" -c 'import rbac,os;print(os.path.dirname(os.path.dirname(rbac.__file__)))' 2>/dev/null)" +BRICKS_DIST="/d/pipeline/pipeline-app/pkgs/bricks/dist" +[ -n "${BASE_PKGS_DIR}" ] && [ -d "${BASE_PKGS_DIR}/rbac/wwwroot" ] || die "基座 rbac wwwroot 定位失败: BASE_PKGS_DIR=${BASE_PKGS_DIR:-}(editable 源不可达?)" +[ -f "${BRICKS_DIST}/header.tmpl" ] || die "bricks dist 不可达: ${BRICKS_DIST}/header.tmpl 不存在(若部署用户无权限,参照 wheelhouse 先例 chmod o+rX + 父链 o+x)" +if [ -e "${APP_DIR}/wwwroot/rbac" ] && [ ! -L "${APP_DIR}/wwwroot/rbac" ]; then + die "wwwroot/rbac 已存在且不是软链(应用仓自带目录?),请人工处置后重试" +fi +if [ -e "${APP_DIR}/wwwroot/bricks" ] && [ ! -L "${APP_DIR}/wwwroot/bricks" ]; then + die "wwwroot/bricks 已存在且不是软链(应用仓自带目录?),请人工处置后重试" +fi +ln -sfn "${BASE_PKGS_DIR}/rbac/wwwroot" "${APP_DIR}/wwwroot/rbac" +ln -sfn "${BRICKS_DIST}" "${APP_DIR}/wwwroot/bricks" +log "基座包 wwwroot 挂载完成: rbac→${BASE_PKGS_DIR}/rbac/wwwroot bricks→${BRICKS_DIST}" + # 挂载后应用侧可达性门禁:覆盖层页面壳必须能通过应用 wwwroot 路径取到 APP_OVERLAY_DIR="${APP_DIR}/wwwroot/pbl_scense_ext/pbl_overlay" APP_UI_COUNT=0