Logo

~/saidqb cat wiki/note/TIL/2026-07.md

MD2026-07.md

commit by saidqb

TIL — Today I Learned (Juli 2026)

Kumpulan catatan singkat hal-hal yang saya pelajari dari kerjaan sehari-hari — kebanyakan seputar Nginx, Laravel, dan Python.

2026-07-30 — Python: blocking call di dalam async def bikin semua request nunggu

Salah satu endpoint FastAPI tiba-tiba jadi lambat banget pas traffic naik — padahal cuma manggil API lain. Penyebabnya: pakai requests (library sync/blocking) di dalam route async def, jadi nge-block satu-satunya event loop sampai request itu selesai — semua request LAIN ikut ketahan juga.

# salah — requests.get() itu blocking, macetin event loop
@app.get("/report")
async def report():
    res = requests.get("https://slow-api.com/data")
    return res.json()

# benar — pakai client async
@app.get("/report")
async def report():
    async with httpx.AsyncClient() as client:
        res = await client.get("https://slow-api.com/data")
    return res.json()

Kalau memang harus pakai library yang sync-only, bungkus pakai fastapi.concurrency.run_in_threadpool supaya tidak block event loop utama.

2026-07-22 — Nginx: upload gagal senyap gara-gara client_max_body_size

User lapor upload dokumen sering gagal tanpa pesan error yang jelas di aplikasi. Ternyata bukan bug di Laravel — Nginx sudah nolak request-nya duluan sebelum sampai ke PHP-FPM, karena client_max_body_size default cuma 1MB.

http {
    client_max_body_size 20M;
}

Baru sadar kalau upload_max_filesize/post_max_size di php.ini itu percuma dinaikin kalau Nginx di depannya masih mentok di limit default.

2026-07-15 — Nginx: 504 Gateway Timeout di endpoint Python yang lama prosesnya

Endpoint Python buat generate laporan (prosesnya berat, > 1 menit) selalu balikin 504 lewat Nginx padahal kalau diakses langsung ke port FastAPI-nya lancar. Ternyata proxy_read_timeout default Nginx cuma 60 detik.

location /api/py/ {
    proxy_pass http://127.0.0.1:8000/;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
}

Solusi jangka panjang sebenarnya bikin endpoint itu jadi job async (queue) daripada nunggu di request, tapi buat sekarang naikin timeout dulu cukup.

2026-07-02 — Laravel: config:cache bikin perubahan .env tidak ke-apply

Ganti value di .env production, restart PHP-FPM, tapi aplikasinya masih pakai value lama. Lupa kalau project ini pakai php artisan config:cache di step deploy — begitu config di-cache, Laravel berhenti baca .env langsung dan selalu pakai file cache-nya.

php artisan config:clear    # hapus cache lama
php artisan config:cache    # generate ulang dari .env terbaru

Sekarang dua command itu saya taruh berurutan di script deploy, jangan cuma config:cache doang.


Lanjutan bulan Agustus ada di 01.TIL/2026-08.md.