fix: BabelDOC 改用 generate-offline-assets 方式預下載資源

- 使用 --generate-offline-assets 生成離線包,比 warmup 更穩定
- 添加 10 分鐘超時控制避免無限等待
- 離線包生成後使用 --restore-offline-assets 恢復到快取
- 如果離線包方式失敗,fallback 到 warmup 模式
- 最多重試 3 次,每次失敗後等待 30 秒
- 即使全部失敗,BabelDOC 仍可在 runtime 按需下載
This commit is contained in:
Your Name 2026-01-22 19:35:04 +08:00
parent 5ad22e44ec
commit e3406a8d04

View file

@ -339,16 +339,55 @@ RUN set -eux && \
rm -rf /root/.cache/huggingface && \
\
# ========================================
# [2/5] BabelDOC Warmup
# [2/5] BabelDOC 資源預下載
# ========================================
# 策略:使用 --generate-offline-assets 生成離線包
# 這比 --warmup 更穩定,因為可以完整驗證所有資源
echo "" && \
echo "📥 [2/5] 執行 BabelDOC warmup..." && \
echo "📥 [2/5] 執行 BabelDOC 資源預下載..." && \
if command -v babeldoc >/dev/null 2>&1; then \
babeldoc --warmup 2>&1 || echo "⚠️ BabelDOC warmup 失敗或無需 warmup"; \
BABELDOC_MAX_RETRIES=3; \
BABELDOC_RETRY_COUNT=0; \
BABELDOC_SUCCESS=false; \
mkdir -p /tmp/babeldoc-offline && \
while [ $BABELDOC_RETRY_COUNT -lt $BABELDOC_MAX_RETRIES ]; do \
BABELDOC_RETRY_COUNT=$((BABELDOC_RETRY_COUNT + 1)); \
echo "🔄 BabelDOC 資源下載嘗試 $BABELDOC_RETRY_COUNT/$BABELDOC_MAX_RETRIES..."; \
if timeout 600 babeldoc --generate-offline-assets /tmp/babeldoc-offline 2>&1; then \
echo "✅ BabelDOC 離線資源包生成成功"; \
OFFLINE_PKG=$(ls /tmp/babeldoc-offline/offline_assets_*.zip 2>/dev/null | head -1); \
if [ -n "$OFFLINE_PKG" ] && [ -f "$OFFLINE_PKG" ]; then \
echo "📦 找到離線包: $OFFLINE_PKG"; \
if babeldoc --restore-offline-assets "$OFFLINE_PKG" 2>&1; then \
echo "✅ BabelDOC 資源已成功恢復到快取"; \
BABELDOC_SUCCESS=true; \
break; \
else \
echo "⚠️ 資源恢復失敗,重試..."; \
fi; \
else \
echo "⚠️ 未找到離線包,嘗試 warmup 模式..."; \
if timeout 600 babeldoc --warmup 2>&1; then \
BABELDOC_SUCCESS=true; \
break; \
fi; \
fi; \
else \
echo "⚠️ BabelDOC 資源下載失敗或超時10分鐘等待 30 秒後重試..."; \
sleep 30; \
fi; \
done; \
rm -rf /tmp/babeldoc-offline; \
if [ "$BABELDOC_SUCCESS" = "true" ]; then \
echo "✅ BabelDOC 資源預下載完成"; \
else \
echo "⚠️ babeldoc 命令不存在,跳過 warmup"; \
echo "⚠️ BabelDOC 資源下載在 $BABELDOC_MAX_RETRIES 次嘗試後仍失敗"; \
echo " BabelDOC 功能將在 runtime 時按需下載資源"; \
fi; \
else \
echo "⚠️ babeldoc 命令不存在,跳過資源預下載"; \
fi && \
echo "✅ BabelDOC warmup 步驟完成" && \
echo "✅ BabelDOC 步驟完成" && \
\
# ========================================
# [3/5] PDFMathTranslate 多語言字型