Skip to content

Xử lý sự cố

Tìm kiếm không trả về kết quả nào

Nguyên nhân thường gặp: chỉ mục chưa được dựng, hoặc hai bản normalize() đã lệch nhau.

bash
npx wrangler d1 execute chuyenchon --remote \
  --command "SELECT COUNT(*) FROM search_docs;"

Nếu bằng 0 → gọi POST /v1/admin/reindex. Nếu khác 0 mà vẫn không ra kết quả → so lại normalize() trong packages/shared/src/text.ts với bản sao trong apps/api/scripts/build-seed.mjs.

Website hiện khung xám mãi không tải xong

Client không gọi được API. Kiểm tra theo thứ tự:

  1. curl https://api.chuyenchon.com/health — Worker còn sống không.
  2. Console trình duyệt có lỗi CORS không → thêm origin vào ALLOWED_ORIGINS rồi deploy lại Worker.
  3. VITE_API_BASE lúc build có đúng không — giá trị này bị nướng vào bundle, đổi biến phải build lại.

Trang chi tiết trả về tiêu đề của trang chủ

Trang đó chưa được prerender. Xem log của scripts/prerender.mjs: nếu có dòng ⚠︎ Không gọi được API thì lúc build API không phản hồi. Deploy API trước rồi build lại web.

vite preview trả về trang chủ cho mọi URL

Đặc thù của công cụ xem thử: nó chỉ phục vụ file tĩnh khi URL kết thúc bằng /. Thử /truong/chuyen-khtn/. Cloudflare Pages xử lý được cả hai dạng.

Migration báo lỗi "table already exists"

Migration cũ đã chạy một phần. Không sửa file migration đã chạy. Với môi trường cục bộ:

bash
pnpm db:reset:local

Với môi trường thật: xuất dữ liệu ra, sửa bằng migration mới, không bao giờ sửa file cũ.

db.batch() báo quá nhiều câu lệnh

D1 giới hạn số câu lệnh mỗi lô. rebuildSearchIndex() đã chia lô 200 câu; nếu thêm thực thể mới làm chỉ mục phình to, giữ nguyên cách chia lô đó thay vì nâng kích thước lô.

Điểm chuẩn hiển thị sai năm

Kiểm tra rằng bản ghi mới được thêm dòng chứ không phải sửa đè dòng năm cũ. Ràng buộc duy nhất trên (school_id, year, grade, route_name) sẽ chặn trùng lặp, nhưng không chặn được việc sửa nhầm năm trên một dòng cũ.

Tài liệu nội bộ dự án Chuyên Chọn.