From 5b5353c75164ecaae34d66beff9e61dbbeb5bdff Mon Sep 17 00:00:00 2001 From: hyungi Date: Thu, 25 Jun 2026 22:54:40 +0000 Subject: [PATCH] =?UTF-8?q?fix(publish):=20=EB=B0=B1=ED=95=84=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=A0=84=20=EB=AA=A8=EB=8D=B8=20?= =?UTF-8?q?import=20(standalone=20mapper=20=EB=A0=88=EC=A7=80=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A6=AC=20=EC=99=84=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit app 은 라우터 경유로 전 모델을 import 하지만 standalone 백필 스크립트는 부분만 import → SQLAlchemy mapper 의 string 관계(StudyTopic.sessions->StudySession 등) 해소 실패로 InvalidRequestError. pkgutil 로 models/* 전 모듈 import 해 레지스트리 완성(전부 컨테이너서 import 가능 = app 기동 시 로드되는 것과 동일). 백필 3종 실행 검증: topics 1·cards 65·progress 22 적재. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/backfill_publish_card_progress.py | 9 +++++++++ scripts/backfill_publish_cards.py | 9 +++++++++ scripts/backfill_publish_topics.py | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/scripts/backfill_publish_card_progress.py b/scripts/backfill_publish_card_progress.py index 9d098e6..ab80e83 100644 --- a/scripts/backfill_publish_card_progress.py +++ b/scripts/backfill_publish_card_progress.py @@ -15,6 +15,15 @@ import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) +# standalone-model-registry-fix: app(라우터 경유 전 모델 import)과 달리 script 는 부분 모델만 +# import → SQLAlchemy mapper string 관계(StudyTopic.sessions->StudySession 등) 해소 실패. +# 전 모델 모듈 import 로 레지스트리 완성(전부 컨테이너서 import 가능 = app 이 기동 시 로드). +import importlib as _il, pkgutil as _pu +import models as _mp +for _m in _pu.iter_modules(_mp.__path__): + _il.import_module("models." + _m.name) + + from sqlalchemy import func, select from core.config import settings diff --git a/scripts/backfill_publish_cards.py b/scripts/backfill_publish_cards.py index fe9f308..4e27833 100644 --- a/scripts/backfill_publish_cards.py +++ b/scripts/backfill_publish_cards.py @@ -15,6 +15,15 @@ import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) +# standalone-model-registry-fix: app(라우터 경유 전 모델 import)과 달리 script 는 부분 모델만 +# import → SQLAlchemy mapper string 관계(StudyTopic.sessions->StudySession 등) 해소 실패. +# 전 모델 모듈 import 로 레지스트리 완성(전부 컨테이너서 import 가능 = app 이 기동 시 로드). +import importlib as _il, pkgutil as _pu +import models as _mp +for _m in _pu.iter_modules(_mp.__path__): + _il.import_module("models." + _m.name) + + from sqlalchemy import func, select from core.config import settings diff --git a/scripts/backfill_publish_topics.py b/scripts/backfill_publish_topics.py index 171d088..7f299b2 100644 --- a/scripts/backfill_publish_topics.py +++ b/scripts/backfill_publish_topics.py @@ -21,6 +21,15 @@ import sys # fastapi 컨테이너 WORKDIR=/app — `from models...` import 가능하게 path 추가. sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) +# standalone-model-registry-fix: app(라우터 경유 전 모델 import)과 달리 script 는 부분 모델만 +# import → SQLAlchemy mapper string 관계(StudyTopic.sessions->StudySession 등) 해소 실패. +# 전 모델 모듈 import 로 레지스트리 완성(전부 컨테이너서 import 가능 = app 이 기동 시 로드). +import importlib as _il, pkgutil as _pu +import models as _mp +for _m in _pu.iter_modules(_mp.__path__): + _il.import_module("models." + _m.name) + + from sqlalchemy import func, select from core.config import settings