fix(build): 入口.so放overlay顶层(root_dir=dirname(dirname(__file__))上两级须为应用根,accounting worker getConfig实抓崩)+runner移_runners/

This commit is contained in:
yumoqing 2026-09-17 18:05:02 +08:00
parent 87e8863208
commit 2e9beeb014
2 changed files with 22 additions and 19 deletions

View File

@ -110,11 +110,14 @@ echo "$MANIFEST" | grep -v '^$' | while read -r entry; do
gen_jobs "$pkgdir" "$pkg" gen_jobs "$pkgdir" "$pkg"
done done
# 入口与 app 顶层模块(script 形态,编译成顶层模块进 _appbin;5 字段与 worker 对齐) # 入口与 app 顶层模块(script 形态;5 字段与 worker 对齐)。
mkdir -p "$OUT/_appbin" # 入口 .so 放 **overlay 顶层**(2026-09-17 实抓):入口模块 top-level 有
# root_dir = dirname(dirname(__file__)) 形态(accounting worker 拿它 getConfig)——虚拟
# __file__=overlay/<stem>.py 时上两级恰为应用根;放 _appbin/ 子目录则上两级=overlay 崩。
mkdir -p "$OUT"
for f in "$ROOT"/app/*.py; do for f in "$ROOT"/app/*.py; do
stem=$(basename "$f" .py) stem=$(basename "$f" .py)
printf "%s\t%s\tmod\t%s\t%s\n" "$f" "$OUT/_appbin" "$stem" "$OUT/_appbin" >> "$JOBS" printf "%s\t%s\tmod\t%s\t%s\n" "$f" "$OUT" "$stem" "$OUT" >> "$JOBS"
done done
cat > "$WORK/worker.sh" <<'EOS' cat > "$WORK/worker.sh" <<'EOS'
@ -138,10 +141,13 @@ echo "编译任务 $total 个,并行 4 …"
xargs -a "$JOBS" -P 4 -n 5 bash "$WORK/worker.sh" xargs -a "$JOBS" -P 4 -n 5 bash "$WORK/worker.sh"
# app 命名空间包(2026-09-17 编译态起服务实抓):入口目录 app/ 无 __init__.py,源码态靠 # app 命名空间包(2026-09-17 编译态起服务实抓):入口目录 app/ 无 __init__.py,源码态靠
# sys.path 插 root_dir 以命名空间包形式被 `from app.quality_gate import ...` 引用;编译态 # sys.path 插 root_dir 以命名空间包形式被 `from app.quality_gate import ...` 引用;编译态
# 必须把 app 模块 .so 复制一份进 overlay/app/(无 __init__ = 命名空间包,py3 原生支持 # 把入口模块 .so 复制一份进 overlay/app/(无 __init__ = 命名空间包,py3 原生支持目录内
# 目录内 .so 子模块)。_appbin 顶层副本保留给入口自身 `from ktv_adapter import ...` 形态。 # .so 子模块)。overlay 顶层副本服务入口自身 `from ktv_adapter import ...` 与 root_dir 语义。
mkdir -p "$OUT/app" mkdir -p "$OUT/app"
cp "$OUT"/_appbin/*.so "$OUT/app/" 2>/dev/null for f in "$ROOT"/app/*.py; do
stem=$(basename "$f" .py)
cp "$OUT/$stem.$TAG.so" "$OUT/app/" 2>/dev/null
done
# 清理 .build 残留(NFS 上 rm -rf 偶发 Directory not empty;--remove-output 只删自己那轮) # 清理 .build 残留(NFS 上 rm -rf 偶发 Directory not empty;--remove-output 只删自己那轮)
find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null
find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null find "$OUT" -maxdepth 4 -type d -name "*.build" -exec rm -rf {} + 2>/dev/null
@ -150,28 +156,25 @@ ok=$(wc -l < "$OKLOG"); fail=$(wc -l < "$FAILLOG")
echo "完成: OK=$ok FAIL=$fail" echo "完成: OK=$ok FAIL=$fail"
if [ "$fail" -gt 0 ]; then echo "== 失败清单 =="; cat "$FAILLOG"; exit 1; fi if [ "$fail" -gt 0 ]; then echo "== 失败清单 =="; cat "$FAILLOG"; exit 1; fi
# runner(工具脚本,非业务代码,保留源码形态) # runner(工具脚本,非业务代码,保留源码形态;放 _runners/ 不污染 overlay 顶层模块面)
cat > "$OUT/_appbin/run_compiled.py" <<'EOS' mkdir -p "$OUT/_runners"
cat > "$OUT/_runners/run_compiled.py" <<'EOS'
#!/usr/bin/env python3 #!/usr/bin/env python3
"""编译态入口 runner:sys.argv 原样透传给 ahserver webapp 的参数解析。 """编译态入口 runner:sys.argv 原样透传给 ahserver webapp 的参数解析。
sys.path 顺序:_appbin(入口编译模块) > overlay 根(编译业务包,遮蔽 site-packages 源码) > 其余。""" sys.path:overlay 根(入口编译模块+业务包,遮蔽 site-packages 源码)。"""
import os, sys import os, sys
_here = os.path.dirname(os.path.abspath(__file__)) _overlay = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_overlay = os.path.dirname(_here)
sys.path.insert(0, _overlay) sys.path.insert(0, _overlay)
sys.path.insert(0, _here)
import pipeline_app import pipeline_app
pipeline_app.main() pipeline_app.main()
EOS EOS
cat > "$OUT/_appbin/run_accounting_compiled.py" <<'EOS' cat > "$OUT/_runners/run_accounting_compiled.py" <<'EOS'
#!/usr/bin/env python3 #!/usr/bin/env python3
"""编译态记账 worker runner:sys.argv 透传(-w workdir)。""" """编译态记账 worker runner:sys.argv 透传(-w workdir)。"""
import os, sys import os, sys
_here = os.path.dirname(os.path.abspath(__file__)) _overlay = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_overlay = os.path.dirname(_here)
sys.path.insert(0, _overlay) sys.path.insert(0, _overlay)
sys.path.insert(0, _here)
import pipeline_accounting_worker import pipeline_accounting_worker
pipeline_accounting_worker.main() pipeline_accounting_worker.main()
EOS EOS

View File

@ -36,7 +36,7 @@ echo "Starting pipeline-app ($MODE mode) on port $PORT..."
export PATH="$WORKDIR/bin:$PATH" export PATH="$WORKDIR/bin:$PATH"
# Nuitka 编译态开关(2026-09-17):conf/compiled_mode 文件存在 → 用 overlay 的编译入口; # Nuitka 编译态开关(2026-09-17):conf/compiled_mode 文件存在 → 用 overlay 的编译入口;
# 删除该文件即回退源码态。overlay 与 runner 由 scripts/build_binary.sh 产出(测试机构建)。 # 删除该文件即回退源码态。overlay 与 runner 由 scripts/build_binary.sh 产出(测试机构建)。
COMPILED_ENTRY=$WORKDIR/binpkg_overlay/_appbin/run_compiled.py COMPILED_ENTRY=$WORKDIR/binpkg_overlay/_runners/run_compiled.py
if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$COMPILED_ENTRY" ]; then if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$COMPILED_ENTRY" ]; then
ENTRY="$COMPILED_ENTRY" ENTRY="$COMPILED_ENTRY"
else else
@ -59,8 +59,8 @@ if [ "$MODE" != "web" ]; then
fi fi
fi fi
if [ ! -f "$ACC_PIDFILE" ]; then if [ ! -f "$ACC_PIDFILE" ]; then
if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$WORKDIR/binpkg_overlay/_appbin/run_accounting_compiled.py" ]; then if [ -f "$WORKDIR/conf/compiled_mode" ] && [ -f "$WORKDIR/binpkg_overlay/_runners/run_accounting_compiled.py" ]; then
ACC_ENTRY="$WORKDIR/binpkg_overlay/_appbin/run_accounting_compiled.py" ACC_ENTRY="$WORKDIR/binpkg_overlay/_runners/run_accounting_compiled.py"
else else
ACC_ENTRY="$WORKDIR/app/pipeline_accounting_worker.py" ACC_ENTRY="$WORKDIR/app/pipeline_accounting_worker.py"
fi fi