Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/dockerfile-vite-site-url-arg.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@app/ratewise': patch
---

修復 Zeabur staging 部署時 VITE_SITE_URL 環境變數不生效的問題:Docker 建置現在會把服務層環境變數帶入 vite build,staging 網域的 PWA manifest start_url/scope 正確指向 staging,可正常安裝;未設定變數時正式站行為零變化。
Binary file removed .playwright-mcp/ui-ux-final-fixed-overflow.png
Binary file not shown.
Binary file removed .playwright-mcp/ui-ux-tooltip-final.png
Binary file not shown.
23 changes: 10 additions & 13 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ ARG VITE_NIHONNAME_BASE_PATH=/nihonname/
ARG VITE_QUAKE_SCHOOL_BASE_PATH=/quake-school/
ARG VITE_PARK_KEEPER_BASE_PATH=/park-keeper/
ARG VITE_SPLIT_MEOW_BASE_PATH=/split-meow/
# [fix:2026-07-08] Zeabur 服務層環境變數需宣告 ARG 才會進入 multi-stage build(issue #682)。
# 不搭配 ENV:未傳值時 ARG 於 RUN 內保持 unset,讓 manifest 與 canonical 回退正式站 SSOT。
ARG VITE_SITE_URL

# Enable corepack for pnpm
RUN corepack enable && corepack prepare pnpm@9.10.0 --activate

# 安裝 git 供版本計算使用(node:alpine 預設未內建)
RUN apk add --no-cache git

WORKDIR /app

# Set pnpm store directory for cache mount
Expand All @@ -37,7 +37,9 @@ ENV BUILD_TIME=${BUILD_TIME}
ENV CI=true

# Copy package files and pnpm config
# [fix:2026-07-08] patchedDependencies 的 patch 檔必須先於 install 進入 image(#622 起)。
COPY .npmrc package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY patches ./patches
COPY apps/ratewise/package.json ./apps/ratewise/
COPY apps/nihonname/package.json ./apps/nihonname/
COPY apps/haotool/package.json ./apps/haotool/
Expand All @@ -57,20 +59,15 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
# Copy source code
COPY . .

# Build applications(若外部未提供 build args,於此自動回退計算)
# Build applications
# [fix:2025-12-13] 分別為每個專案設置對應的 base 變數,避免相互污染
# [2025 Best Practice] Sitemaps 現在由 vite-ssg-sitemap 在 build 時自動生成
# [2026-07-05] haotool 根站先建(根站優先,見 docs/dev/046 §9)
# [fix:2026-07-08] 移除 git 回退死碼:.dockerignore 排除 .git,容器內 git 指令必失敗,
# 版本 metadata 一律由 build args 提供(見 build-docker.sh)。
# VITE_SITE_URL 傳入空字串時 unset,避免污染 import.meta.env 的 ?? 回退鏈。
RUN set -eux; \
if [ -z "${GIT_COMMIT_COUNT:-}" ]; then \
export GIT_COMMIT_COUNT="$(git rev-list --count HEAD)"; \
fi; \
if [ -z "${GIT_COMMIT_HASH:-}" ]; then \
export GIT_COMMIT_HASH="$(git rev-parse --short HEAD)"; \
fi; \
if [ -z "${BUILD_TIME:-}" ]; then \
export BUILD_TIME="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"; \
fi; \
if [ -z "${VITE_SITE_URL:-}" ]; then unset VITE_SITE_URL; fi; \
VITE_HAOTOOL_BASE_PATH=/ pnpm build:haotool && \
VITE_RATEWISE_BASE_PATH=/ratewise/ pnpm build:ratewise && \
VITE_NIHONNAME_BASE_PATH=/nihonname/ pnpm build:nihonname && \
Expand Down
7 changes: 6 additions & 1 deletion docs/dev/002_development_reward_penalty_log.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> 版本:outline-v2-ultra
> 原則:每筆只保留日期、ID、原因、解法。
> 本次分數變化:+1(reward 1、penalty 0、neutral 0)|累計總分:+194
> 本次分數變化:+1(reward 1、penalty 0、neutral 0)|累計總分:+195

## 新增模板(4 行)

Expand All @@ -13,6 +13,11 @@

## 條目(新→舊)

- 日期:2026-07-08
- ID:reward-rw-682-dockerfile-vite-site-url-arg
- 原因:root Dockerfile builder stage 未宣告 ARG VITE_SITE_URL,Zeabur 服務層環境變數不進入 multi-stage vite build,#613 的 manifest 環境驅動修正於 staging 斷鏈(start_url/scope 仍指向正式站,QA-I D7 根因鏈);驗證中另揭露 #622 引入 patchedDependencies 後 patch 檔未先 COPY 使容器 pnpm install 必炸(ENOENT patches/),且 .dockerignore 排除 .git 使 builder 內 git fallback 為死碼、兩張 QA 截圖誤入庫
- 解法:builder stage 補 ARG VITE_SITE_URL(依 Zeabur 官方 multi-stage 文件;不搭 ENV 避免未傳值固化空字串、RUN 內空字串 unset 防護,堵住 import.meta.env 的 ?? 回退鏈污染——Docker 實測 ARG 未傳值於 RUN 為 unset)、install 前補 COPY patches、移除 apk git 與三段 git fallback 死碼、截圖 git rm --cached 出庫(.gitignore 既有 .playwright-mcp/ 防護);docker build --target builder 兩情境產物驗證 staging manifest 指向 staging、無變數時與 committed manifest 零差異

- 日期:2026-07-08
- ID:reward-rw-651-card-rate-phase2-canary-pipeline
- 原因:ADR-002 Phase 2 需 data pipeline 以 canary 模式驗證 Visa/MC 清算匯率抓取排程成功率,前提是官方免費 API 不可用且非官方端點被邊緣封鎖,須先實測確認
Expand Down
Loading