From 1f9eea5b7477ba1b57335076c1512d9dcc3ef933 Mon Sep 17 00:00:00 2001 From: OG T Date: Wed, 8 Apr 2026 21:34:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20service=5Fregistry.py=20Path=20?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E4=BF=AE=E6=AD=A3=20=E2=80=94=20=E7=9B=B8?= =?UTF-8?q?=E5=AE=B9=20Docker=20=E5=AE=B9=E5=99=A8=E7=92=B0=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/api/src/services/service_registry.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/apps/api/src/services/service_registry.py b/apps/api/src/services/service_registry.py index 2c38010c..8cb27626 100644 --- a/apps/api/src/services/service_registry.py +++ b/apps/api/src/services/service_registry.py @@ -15,8 +15,24 @@ import yaml logger = structlog.get_logger(__name__) -# YAML 路徑(相對於 repo root) -_DEFAULT_REGISTRY_PATH = Path(__file__).parents[5] / "ops" / "config" / "service-registry.yaml" +# YAML 路徑 — 安全搜尋,相容本地開發 + Docker 容器 +# 本地: apps/api/src/services/ → parents[4] = repo root +# Docker: /app/src/services/ → parents[3] = /app → 需要往上找 ops/config +def _find_registry_path() -> Path: + """安全搜尋 service-registry.yaml,相容不同部署環境""" + candidates = [ + Path(__file__).resolve().parents[4] / "ops" / "config" / "service-registry.yaml", # 本地開發 + Path(__file__).resolve().parents[3] / "ops" / "config" / "service-registry.yaml", # Docker + Path("/app/ops/config/service-registry.yaml"), # Docker 絕對路徑 + Path(__file__).resolve().parents[2] / "ops" / "config" / "service-registry.yaml", + ] + for p in candidates: + if p.exists(): + return p + # fallback: 回傳第一個候選(會在載入時報錯,但不會 crash import) + return candidates[0] + +_DEFAULT_REGISTRY_PATH = _find_registry_path() class StatefulLevel(str, Enum):