증상: /m/admin/orders 거래명세표에서 [+ 택배/용차 추가] 클릭 시 "라인 저장 중 오류" 500.
원인: 마이그레이션 010 (momo_order_items.kind/extra_label, momo_orders.total_delivery/charter)이
운영 DB에 적용되지 않음. deploy.yml 의 docker compose exec 가 silent fail 했을 가능성.
[deploy.yml]
- 컨테이너 안 마이그레이션 실패 시 → 호스트에서 docker run node:20 + pg 임시 컨테이너 폴백
- 호스트는 source 디렉토리를 /work 로 마운트해서 db/migrations 와 scripts/migrate-momo.mjs 직접 실행
- 모두 실패하면 ::error:: 로 명확히 표시 (warning 무시 방지)
[lines/save]
- catch 블록에서 실제 PG 에러 메시지 노출
- 'column does not exist'(42703) 감지 시 마이그레이션 미적용 힌트 추가
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -59,9 +59,21 @@ jobs:
|
||||
|
||||
docker compose -f docker-compose.prod.yml up -d --build
|
||||
|
||||
# 마이그레이션 (idempotent)
|
||||
docker compose -f docker-compose.prod.yml exec -T momo-erp npm run migrate:momo || \
|
||||
echo "::warning::migration skipped"
|
||||
# 마이그레이션 (idempotent) — 컨테이너 안에 db/migrations + scripts/migrate-momo.mjs 가
|
||||
# standalone 번들에 포함되어 있어야 동작 (next.config.ts outputFileTracingIncludes).
|
||||
# 컨테이너 시도 후 실패하면 호스트 측 docker run 으로 폴백 (소스 마운트 사용).
|
||||
if docker compose -f docker-compose.prod.yml exec -T momo-erp node scripts/migrate-momo.mjs 2>&1; then
|
||||
echo "✔ 마이그레이션 컨테이너 실행 성공"
|
||||
else
|
||||
echo "::warning::컨테이너 마이그레이션 실패 — 호스트에서 임시 컨테이너로 재시도"
|
||||
docker run --rm \
|
||||
--network host \
|
||||
-v "$DEPLOY_DIR":/work \
|
||||
-w /work \
|
||||
--env-file "$DEPLOY_DIR/.env.production" \
|
||||
node:20-alpine sh -c "npm i pg --no-save --silent && node scripts/migrate-momo.mjs" \
|
||||
|| echo "::error::마이그레이션 모두 실패 — 수동 실행 필요"
|
||||
fi
|
||||
|
||||
docker compose -f docker-compose.prod.yml ps
|
||||
echo "✔ 배포 완료"
|
||||
|
||||
@@ -146,7 +146,12 @@ export async function POST(req: NextRequest) {
|
||||
} catch (err) {
|
||||
await client.query("ROLLBACK");
|
||||
console.error("[orders/lines/save]", err);
|
||||
return NextResponse.json({ success: false, message: "라인 저장 중 오류가 발생했습니다." }, { status: 500 });
|
||||
const msg = err instanceof Error ? err.message : "라인 저장 중 오류가 발생했습니다.";
|
||||
// PG 컬럼 없음(undefined column 42703) — 마이그레이션 미적용 케이스
|
||||
const hint = /column .* does not exist|undefined column|42703/i.test(msg)
|
||||
? " · DB 마이그레이션 010(kind/extra_label/total_delivery/total_charter)이 적용되지 않은 것 같습니다."
|
||||
: "";
|
||||
return NextResponse.json({ success: false, message: msg + hint }, { status: 500 });
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user