Tổng hợp lỗi đã gặp khi vận hành builderx_api và cách xử nhanh. Khi gặp lỗi mới, ghi lại đây (kèm version, ngày, người gặp) để team sau dùng lại.
Triệu chứng: action publish/save site/page fail, log báo không ghi được file vào priv/static/css.
Cách xử:
# Trong container app
mkdir -p priv/static/css priv/static/js priv/static/uploadsNguyên nhân: container mới hoặc volume mount mới chưa có folder. Ghi đè permission nếu cần (chown app:app).
Log mẫu: ** (KeyError) key :stripe_sk not found.
Cách xử:
- Mở
.env(hoặc.dev.env) → bổ sung biến thiếu (xem Environment). - Restart container:
docker compose restart builderx_api.
Triệu chứng: tạo migration thêm cột nhưng báo bảng chưa distribute.
Cách xử:
- Kiểm tra migration trước đó có
SELECT create_distributed_table('table', 'site_id')không. - Nếu là bảng mới: chạy lại migration tạo bảng + distribute.
- Nếu bảng đã có ở prod nhưng dev chưa distribute → script lại bằng
mix ecto.rollback -r BuilderxApi.Citusrồi migrate lại.
-
Kiểm tra
BuilderxApi.DynamicApp.start_rabbitđã chạy chưa (trong dev có thể phải tự start). -
Mở Rabbit UI (
http://localhost:15672) → kiểm tra queue có message hay không, consumer count ≥ 1. -
Reset connection:
AMQP.Connection.close(:my_conn) BuilderxApi.DynamicApp.start_rabbit
- Bulk index quá nhanh. Giảm batch size trong
Rabbit.IndexingConsumerhoặc bật backoff. - Nếu prod, mở Kibana / Elastic monitoring để tìm shard nóng.
STRIPE_WEBHOOK_SECRET_KEYkhông khớp giữa Stripe dashboard và env.- Thời gian server lệch quá lớn → đồng bộ NTP.
- Đổi
JWT_KEYsẽ invalidate token cũ – mọi user phải login lại. - Trong dev: clear
localStorage/ cookie trênbuilderx_spa.
- Dấu hiệu: RAM tăng dần, ETS table khổng lồ (
:ets.info(table, :size)). - Kiểm tra job cache theo site có gọi
:ets.delete(table)khi site bị xoá. - Tạm thời restart node để dọn.
-
Outbox row tăng nhưng không drain → consumer fail.
-
Kiểm tra Sentry tìm lỗi gốc.
-
Restart dispatcher:
Outbox.Dispatcher.restart()
- Một số dep dùng git ref cụ thể (vd
slugger,html_sanitize_ex). Nếu repo không reachable → kiểm tra mạng / proxy. - Có thể đặt
MIX_REBAR_PATH/HEX_HTTP_TIMEOUTnếu chậm.
- Thiếu thư viện libvips trong image. Đảm bảo Dockerfile cài:
apt-get install -y libvips-dev.
- Port WDS bị block. Set
WDS_SOCKET_HOST=0.0.0.0,WDS_SOCKET_PORT=0(auto). - Cần chạy
cd assets && npm run watch.
- Service mongo chưa healthcheck. Thêm wait-for-it trong CI step hoặc retry trong test setup.
- Test dùng
Ecto.Adapters.SQL.Sandbox– đảm bảo mỗi test boot setupSandbox.checkout(BuilderxApi.Repo)vàSandbox.mode/2đúng.
- Lỗi không tìm được trong tài liệu và không tìm thấy commit liên quan trong 30 phút → đăng lên
#backend-help. - Lỗi prod kéo dài > 5 phút ảnh hưởng khách → bật incident channel + thông báo manager.
Khi giải quyết, cập nhật mục mới vào file này thay vì để kiến thức lẩn vào chat.