fix(liste): üretim sonrası sunucu yanıt vermezse 502 sayfasına gidilmiyor
iPad raporu: liste üretildikten sonra ekran "Bad Gateway" gösterdi ve
tarayıcı `listem.txt` indirdi. Sıra şu: liste DB'ye yazıldı → `router.replace`
→ Next'in RSC isteği ters vekilden 502 aldı → Next tam-sayfa gezinmeye düştü
(WebKit düz metin cevabı dosya olarak kaydetti) → 6 sn'lik emniyet supabı
`window.location.replace` ile aynı 502'yi ekrana getirdi.
Üç değişiklik:
- Dockerfile runner katmanına `--max-old-space-size=768`. V8 cgroup sınırını
görmez, heap üst sınırını host RAM'ine göre seçer; `mem_limit: 1g` ile
birleşince V8 daha GC yapmadan konteyner OOM ile ölüyor ve açık istek 502'ye
düşüyor. Sınır builder katmanında vardı, runner'a miras kalmıyordu.
- `/api/saglik`: DB/oturum/AI'ya dokunmayan en ucuz uç. Dockerfile HEALTHCHECK
bunu yokluyor — süreç ölüp açılırken `docker ps` "unhealthy" gösterir, bir
sonraki 502'nin kaynağı tahmine kalmaz.
- Emniyet supabı tam-sayfa gezinmeden önce sunucuyu yokluyor. Sunucu yoksa
ekranda kalınıp "listen oluşturuldu ve kaydedildi, kredin yeniden harcanmaz"
ekranı + sunucuyu yeniden yoklayan buton gösteriliyor; `liste_uretim_hata
{kod:"SUNUCUYA_ULASILAMIYOR"}` olayı düşüyor. Sunucu yokken `router.refresh`
de aynı tuzağa düştüğü için o dalda atlanıyor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
18
src/app/api/saglik/route.ts
Normal file
18
src/app/api/saglik/route.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
// Sunucu ayakta mı? Bilerek en ucuz uç: DB'ye, oturuma, AI'ya dokunmaz, gövdesi
|
||||
// sabittir. İki yerden sorulur:
|
||||
// 1) Docker HEALTHCHECK (bkz. Dockerfile): konteyner OOM ile öldüğünde ya da
|
||||
// açılışta henüz hazır olmadığında "unhealthy" görünür.
|
||||
// 2) /listem üretim ekranı (bkz. features/rapor/components/liste-uretici.tsx):
|
||||
// liste kurulduktan sonra yönlendirme ekranı çevirmediyse, ters vekilin
|
||||
// (Traefik) düz metin 502 sayfasına tam-sayfa gezinmeden önce sunucunun
|
||||
// yaşadığı buradan sorulur.
|
||||
// `dynamic` segment ayarı Cache Components açıkken kaldırıldı (Next 16), o
|
||||
// yüzden yalnızca no-store başlığı verilir.
|
||||
export function GET() {
|
||||
return NextResponse.json(
|
||||
{ ok: true },
|
||||
{ headers: { "Cache-Control": "no-store" } },
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user