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.