- 스크립트 부트스트랩의 databaseURL 기본값에 리전 포함 — 기존 `...firebaseio.com`은 SDK가 "Database lives in a different region" 경고만 내고 다른 리전의 없는 DB를 보게 해서, 조회가 조용히 빈 결과를 돌려주고 실행이 멈췄다. 지금까지 스크립트가 RTDB를 안 써서 드러나지 않던 문제다. FIREBASE_DATABASE_REGION으로 덮어쓸 수 있다 - 백필 스크립트가 접속한 database URL을 먼저 출력하도록 변경 - 소스가 비었을 때 완료 마커를 자동으로 남기지 않고 --mark-empty를 요구하도록 변경 — 빈 조회는 "정말 투표가 없다"와 "엉뚱한 DB에 붙었다"를 구분하지 못하는데, 후자에서 마커가 켜지면 이후 dailyArchive가 인덱스만 믿고 전 유저를 건너뛴다
29 lines
1.4 KiB
TypeScript
29 lines
1.4 KiB
TypeScript
/**
|
|
* prod Firebase Admin 부트스트랩(side-effect 모듈).
|
|
*
|
|
* 반드시 src/* 모듈보다 "먼저" import해야 한다 — 그래야 src/firebase의
|
|
* initializeApp()가 재실행되지 않고 여기서 만든 앱(projectId·databaseURL 지정)을
|
|
* 재사용한다. 자격증명은 ADC(applicationDefault)를 쓴다:
|
|
* gcloud auth application-default login
|
|
* 또는 GOOGLE_APPLICATION_CREDENTIALS=<서비스계정.json>
|
|
*
|
|
* databaseURL은 반드시 **리전을 포함**해야 한다. 리전 없는 기본 호스트
|
|
* (`...firebaseio.com`)로 붙으면 SDK가 "Database lives in a different region"만
|
|
* 경고하고 다른 리전의 (존재하지 않는) DB를 보게 되어, 조회가 조용히 빈 결과를
|
|
* 돌려준다 — 그 값을 사실로 믿는 스크립트는 위험한 판단을 내릴 수 있다.
|
|
* 리전은 FIREBASE_DATABASE_REGION, 전체 URL은 FIREBASE_DATABASE_URL로 덮어쓴다.
|
|
*/
|
|
import { initializeApp, getApps } from "firebase-admin/app";
|
|
|
|
const projectId = process.env.FIREBASE_PROJECT ?? process.env.GCLOUD_PROJECT ?? "mmday-panit";
|
|
const databaseRegion = process.env.FIREBASE_DATABASE_REGION ?? "asia-southeast1";
|
|
const databaseURL =
|
|
process.env.FIREBASE_DATABASE_URL ??
|
|
`https://${projectId}-default-rtdb.${databaseRegion}.firebasedatabase.app`;
|
|
|
|
if (getApps().length === 0) {
|
|
initializeApp({ projectId, databaseURL });
|
|
}
|
|
|
|
export const BOOTSTRAP_PROJECT = projectId;
|