@@ -39,35 +39,42 @@ async def lifespan(app: FastAPI):
3939 # 시작 훅: 첫 요청 전에 의존성(Chroma/체인) 초기화
4040 # - 첫 요청에서 터지지 않게 fail-fast
4141 # - 권한/경로 문제를 부팅 단계에서 바로 발견
42+ # - 실패 시 로그에 전체 traceback 남김 (502 원인 확인: docker logs <container>)
4243 logger .info ("[lifespan] startup: initializing dependencies (chroma + generators)" )
43-
44- # Chroma persist directory 쓰기 가능 여부 확인 (권한 이슈 조기 감지)
45- persist_dir = Path (settings .chroma_persist_directory )
46- persist_dir .mkdir (parents = True , exist_ok = True )
47- write_test_path = persist_dir / ".write_test"
4844 try :
49- write_test_path .write_text ("ok" , encoding = "utf-8" )
50- write_test_path .unlink (missing_ok = True )
51- except Exception as e :
52- logger .error (f"[lifespan] chroma persist dir not writable: { persist_dir } " , exc_info = True )
53- raise RuntimeError (f"Chroma persist directory is not writable: { persist_dir } " ) from e
54-
55- # DI 싱글톤 생성(초기화) 트리거
56- from app .presentation .dependencies import (
57- get_chroma_collection ,
58- get_family_generator ,
59- get_personal_generator ,
60- get_summary_generator ,
61- get_vector_store ,
62- )
63-
64- get_chroma_collection ()
65- get_vector_store ()
66- get_personal_generator ()
67- get_family_generator ()
68- get_summary_generator ()
45+ # Chroma persist directory 쓰기 가능 여부 확인 (권한 이슈 조기 감지)
46+ persist_dir = Path (settings .chroma_persist_directory )
47+ persist_dir .mkdir (parents = True , exist_ok = True )
48+ write_test_path = persist_dir / ".write_test"
49+ try :
50+ write_test_path .write_text ("ok" , encoding = "utf-8" )
51+ write_test_path .unlink (missing_ok = True )
52+ except Exception as e :
53+ logger .error (
54+ f"[lifespan] chroma persist dir not writable: { persist_dir } " , exc_info = True
55+ )
56+ raise RuntimeError (f"Chroma persist directory is not writable: { persist_dir } " ) from e
57+
58+ # DI 싱글톤 생성(초기화) 트리거
59+ from app .presentation .dependencies import (
60+ get_chroma_collection ,
61+ get_family_generator ,
62+ get_personal_generator ,
63+ get_summary_generator ,
64+ get_vector_store ,
65+ )
66+
67+ get_chroma_collection ()
68+ get_vector_store ()
69+ get_personal_generator ()
70+ get_family_generator ()
71+ get_summary_generator ()
72+
73+ logger .info ("[lifespan] startup: initialization complete" )
74+ except Exception :
75+ logger .exception ("[lifespan] startup failed (502 원인 확인: docker logs <container>)" )
76+ raise
6977
70- logger .info ("[lifespan] startup: initialization complete" )
7178 yield
7279 logger .info ("[lifespan] shutdown" )
7380
0 commit comments