Troubleshooting
10 case lỗi phổ biến team test/triển khai gặp phải. Mỗi case: triệu chứng + nguyên nhân + cách fix.
Case 1: Login fail / session expired liên tục
Phần tiêu đề “Case 1: Login fail / session expired liên tục”Triệu chứng: User login OK, làm 5-10 phút thì bị kick về login. Hoặc click action báo “Session expired”.
Nguyên nhân:
- Cookie session bị reset do browser xóa cache
- Multi-instance Odoo không share session (cần sticky session ở nginx/cloudflare)
- Server time mismatch nhiều hơn 5 phút với browser
Fix:
# Check time syncntpdate -q time.google.com
# Nginx sticky sessionupstream odoo { ip_hash; # Sticky theo IP server odoo1:8069; server odoo2:8069;}Case 2: Permission denied khi mở module
Phần tiêu đề “Case 2: Permission denied khi mở module”Triệu chứng: User click menu báo “You don’t have access to this view”.
Nguyên nhân: ACL ir.model.access.csv chưa grant đủ model cho group user.
Fix: Settings → Users & Companies → Users → check group đã assign. Hoặc dev mode → Technical → ACL list → search model bị thiếu.
Ví dụ: User group re_loan.group_loan_user cần access account.tax, account.account.tag, res.partner.bank để mở form HĐ NH.
Case 3: View không hiện / blank trắng
Phần tiêu đề “Case 3: View không hiện / blank trắng”Triệu chứng: Browser load page hiện blank, F12 Console báo lỗi JS.
Nguyên nhân:
- Asset bundle stale (cache cũ sau deploy code mới)
- View XML có lỗi syntax (xpath không match)
- Module dependency bị thiếu
Fix:
# Xoá asset cache trong DBdocker compose exec -T db psql -U odoo -d dev -c \ "DELETE FROM ir_attachment WHERE name LIKE '%web.assets%';"
# Restart Odoodocker compose restart odoo
# Browser Cmd+Shift+R hard refreshCase 4: Sequence number duplicate
Phần tiêu đề “Case 4: Sequence number duplicate”Triệu chứng: Tạo record mới báo IntegrityError: duplicate key value violates unique constraint.
Nguyên nhân:
- Sequence reset thủ công sai
- Restore backup làm sequence pointer lệch
Fix:
-- Reset sequence dựa trên max ID hiện cóSELECT setval('rp_contract_id_seq', (SELECT MAX(id) FROM rp_contract) + 1);Case 5: Cron không chạy
Phần tiêu đề “Case 5: Cron không chạy”Triệu chứng: Cron schedule đã set nhưng tới giờ không trigger.
Nguyên nhân:
- Cron worker không running (docker compose thiếu
--workers) - Cron bị
active=False - Cron last execution stuck
Fix:
# Check cron workerdocker compose logs odoo | grep -i cron
# Verify cron active in Settings → Technical → Scheduled Actions# Reset stuck cron:UPDATE ir_cron SET active=true WHERE id=X;UPDATE ir_cron SET nextcall=NOW() WHERE id=X;Case 6: Email không gửi
Phần tiêu đề “Case 6: Email không gửi”Triệu chứng: Cron generate báo cáo OK, log “Email sent” nhưng inbox không nhận.
Nguyên nhân:
- SMTP config sai
- Email gửi vào spam folder
- DNS SPF/DKIM/DMARC chưa setup
Fix:
- Settings → Technical → Outgoing Mail Servers → Test connection
- Mail queue: Settings → Technical → Email → Emails — check state failed + lý do
- SPF: thêm domain Odoo server vào DNS TXT record
- Test với mailtrap.io trước khi switch sang SMTP prod
Case 7: Excel export crash
Phần tiêu đề “Case 7: Excel export crash”Triệu chứng: Click “Export Excel” báo lỗi 500 hoặc download file 0 byte.
Nguyên nhân:
- Large dataset (hơn 50K rows) — Odoo timeout
- Field có ký tự special không escape
- Worker timeout
proxy_read_timeoutquá thấp
Fix:
proxy_read_timeout 300s;proxy_send_timeout 300s;Filter dataset nhỏ hơn (theo project + thời gian) trước khi export. Hoặc dùng API JSON + xử lý phía client.
Case 8: Browser cache assets stale
Phần tiêu đề “Case 8: Browser cache assets stale”Triệu chứng: Sau deploy code mới, UI vẫn hiện feature cũ. Hard refresh không khắc phục.
Nguyên nhân: Browser hold cached assets từ old asset bundle hash.
Fix: User mở Chrome DevTools → Network tab → check “Disable cache” → reload. Hoặc trong Odoo:
# Bump asset version (force browser re-download)env['ir.attachment'].search([('name','like','%web.assets%')]).unlink()Case 9: Postgres connection lost
Phần tiêu đề “Case 9: Postgres connection lost”Triệu chứng: Random báo OperationalError: server closed the connection unexpectedly.
Nguyên nhân:
- Connection pool exhausted
- DB restart trong khi Odoo còn connection
- Network glitch (Docker bridge)
Fix: Odoo.conf:
[options]db_maxconn = 64limit_time_cpu = 600limit_time_real = 1200Restart Odoo container.
Case 10: Performance chậm với large dataset
Phần tiêu đề “Case 10: Performance chậm với large dataset”Triệu chứng: List view 10K+ records load hơn 30 giây. Report cross-module timeout.
Nguyên nhân:
- Field computed not stored
- Missing index
- N+1 query problem trong compute
Fix:
- Profile với Odoo dev tools: query log → tìm slow query
- Add index cho field thường filter:
class Foo(models.Model): project_id = fields.Many2one('re.project', index=True) state = fields.Selection(..., index=True)- Store computed field nếu được:
amount_total = fields.Monetary(compute='_compute', store=True)- Convert compute từ Python loop sang SQL aggregate:
self.env.cr.execute(""" SELECT contract_id, SUM(amount) FROM milestone GROUP BY contract_id""")