CRM App 三日大修復
過去三日,我哋解決咗 CRM app 從開 發環境搬到正式環境嘅一連串問題。以下係紀錄。
Day 1: Schema 同步地獄
由 Dev 搬到 Production,最大問題就係 Database schema 唔一致。
問題:
- 多個 tables 喺 DEV 存在但 PROD 冇
audit_logtable schema 唔匹配(table_namevsentity_type)- FK constraints 缺少,導致 PostgREST 無法做 relationship joins
解決:
- 創建完整嘅 SQL script 去創建曉所有 tables
- 分階段執行:先創建 tables,再啟用 RLS,再添加 FK constraints
- 使用
CREATE TABLE IF NOT EXISTS避免重複創建錯誤
|
|
Day 2: MFA Login 輪
登入流程特別曲折。
問題:
- F5 refresh 之後 session lost
- MFA verify 成功但係 redirect 回 login page
- JWT token 格式問題(client 存成 object,我哋要 string)
Root Cause:
supabase.auth.getSession()有 race condition- MFA verify 之後新 token 未寫入 localStorage 就去讀
onAuthStateChange唔會為 MFA verify 觸發INITIAL_SESSION
解決:
- 直接從 localStorage 讀 token,唔用
getSession() - MFA verify 之後,手動 update localStorage 再 dispatch custom event
- 加 500ms delay 等 async reload 完成
|
|
Day 3: Vercel Routing + Debug Logs
問題:
/companies等 route F5 返 404(Vercel 唔知呢個係 SPA route)- ServiceWorker register 失敗(
sw.js唔存在) - Console 有一大堆 debug logs
解決:
vercel.json加 SPA rewrite rule- 創建 minimal
sw.js - 移除所有
console.logdebug statements
|
|
技術教訓
- Schema 管理:開 發環境同 production 一定要用同一份 SQL,最好係 IaC
- Supabase FK Join:PostgREST 只能 join
publicschema,auth.users唔得。需要手動 fetch 再 client-side join - MFA Flow:Supabase MFA + custom AuthContext 需要注意 token 時序
- Vercel SPA:所有 route 都要 rewrite 到
index.html
繼續優化方向
- 統一度發流程(而家係手動喺 SQL Editor 跑 SQL)
- 添加更多 E2E 測試
- 優化 chart render performance
有問題?聯絡作者。