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):