$ man yanlis-veritabanina-baglanan-site
YANLIS-VERITABANINA-BAGL(7)ÖğrendiklerimYANLIS-VERITABANINA-BAGL(7)
NAME
Sitem neden yanlış veritabanına bağlanıyor?
SYNOPSIS
7 Ekim 2024 · ~2 dk okuma
DESCRIPTION
Sitem Vercel'de çalışıyor, veritabanı Neon'da. Güvenlik için veritabanı şifremi sıfırladım, yeni şifreyi ortam değişkenlerine girdim ve işin bittiğini düşündüm. Ertesi gün blog sayfası 500 hatası veriyordu. Bir günlük araştırmalarım sonunda karşıma tek bir hata değil, üst üste binmiş beş ayrı sorun çıktı.
KISACA
- Hangi Vercel projesinin canlı olduğunu Domains sayfası söyler.
- 2 saniyede düşen bir build, aslında hiç başlamamıştır.
- "Table does not exist" bazen yanlış veritabanı demektir.
- Redeploy, seçtiğin deploy'un commit'ini yeniden build eder. En yenisini değil.
1. AYNI REPOYA BAĞLI İKİ PROJE
Vercel'de her push iki deploy başlatıyordu: sema-goktas-dev ve semagoktasdev. Biri unutulmuş bir kopya sanıp silmek üzereydim. Domains sayfasına bakınca gördüm ki canlı siteyi yayınlayan, tam da silmeyi düşündüğüm projeymiş.
Ders: silmeden önce hangisinin domain'e bağlı olduğunu kontrol et.
2. İKİ SANİYEDE DÜŞEN BUILD
Canlı projenin build logu tek satırdı:
Node.js Version "20.x" is discontinued and must be upgraded.
Proje aylardır dokunulmadan durduğu için platform altından Node 20 desteğini kaldırmıştı. Çözüm, sürümü kodda sabitlemek:
"engines": { "node": "24.x" }
3. "BENDE ÇALIŞIYOR"
Diğer proje bir dakika build edip düşüyordu. Yerelde her şey yolundaydı, çünkü OPENAI_API_KEY bende vardı, Vercel'de yoktu. Chat route'u OpenAI client'ını modül seviyesinde oluşturuyordu ve anahtar yoksa build sırasında hata veriyordu. Yerelde aynı hatayı şöyle ürettim:
$ OPENAI_API_KEY= npm run build
Çözüm: client'ı istek geldiği anda oluşturmak, anahtar yoksa 503 dönmek.
4. YANLIŞ VERİTABANI
Build geçti ama blog hâlâ 500 veriyordu. Vercel Logs sekmesindeki asıl hata:
The table `public.Post` does not exist in the current database.
Bağlantı adresinin sonuna bakınca sebebi gördüm. Host doğruydu ama veritabanı adı başka bir projeme aitti. Aynı Neon sunucusunda iki ayrı veritabanı vardı ve entegrasyon yanlış olanı seçmişti.
Asıl sürpriz: bu değişkeni entegrasyon yönetiyordu ve düzenlenemiyordu. Çözüm, kodun önce benim yönettiğim değişkeni okumasıydı:
DATABASE_URL || NEON_DATABASE_URL
Ders: uygulamanın bağımlı olduğu değişken benim kontrolümde olmalı.
5. REDEPLOY TUZAĞI
Düzeltmeyi push'ladım, ardından değişkenler geçerli olsun diye listedeki eski bir deploy'da "Redeploy"a bastım. Vercel o eski commit'i yeniden canlıya aldı ve düzeltmem geri gitti. Doğru satırda (en yeni commit'te) tekrar Redeploy yapınca blog sonunda açıldı.
AKLIMDA KALSIN
- Önce logu oku: 500'ün gerçek sebebi Logs sekmesinde.
- Tek seferde tek bir şeyi değiştir; yoksa hangi adımın neyi düzelttiğini bilemezsin.
- Ortam değişkeni değiştirmek tek başına yetmez; bir sonraki deploy'da geçerli olur.
- Gizli bilgiyi göstermeden teşhis: şifreyi değil, host'u ve veritabanı adını kontrol et.
semagoktas.dev7 Ekim 2024YANLIS-VERITABANINA-BAGL(7)
← cd ../notes