fix(worker): 初始化 PostgreSQL 連線池 - 修復 Incident DB 持久化

問題:
- Signal Worker 沒有初始化 PostgreSQL,導致 incidents 表可能不存在
- Incident 只寫入 Redis,未持久化到 PostgreSQL
- 審核後無法正確更新 DB 狀態

修復:
- 在 Signal Worker 啟動時呼叫 init_db() 建立表
- 在關閉時呼叫 close_db() 釋放連線池
- 增加 PostgreSQL 初始化日誌

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-23 23:13:49 +08:00
parent c8558cda9e
commit bd1f94dd72

View File

@@ -326,17 +326,30 @@ async def _main() -> None:
# Initialize settings first (loads env vars)
from src.core.config import settings # noqa: F401
from src.core.redis_client import init_redis_pool, close_redis_pool, init_worker_redis_pool, close_worker_redis_pool
from src.db.base import init_db, close_db
logger.info(
"signal_worker_standalone_starting",
environment=settings.ENVIRONMENT,
redis_url=settings.REDIS_URL.split("@")[-1] if settings.REDIS_URL else "N/A",
database_url=settings.DATABASE_URL.split("@")[-1] if settings.DATABASE_URL else "N/A",
)
# Initialize Redis (API pool + Worker 專屬長連線池)
await init_redis_pool()
await init_worker_redis_pool() # Worker 專屬,無超時限制
# Initialize PostgreSQL (Episodic Memory) - 確保 incidents 表存在
try:
await init_db()
logger.info("postgresql_initialized", status="ok")
except Exception as e:
logger.error(
"postgresql_init_failed",
error=str(e),
message="Episodic Memory (DB) will be unavailable - incidents won't persist",
)
# Write health files for K8s probes
await _write_health_files()
@@ -361,6 +374,7 @@ async def _main() -> None:
await worker.stop()
await close_worker_redis_pool() # 關閉 Worker 專屬連線
await close_redis_pool()
await close_db() # 關閉 PostgreSQL 連線池
# Remove health files
from pathlib import Path