Tamamlandı Kritik Bug Fix

Domains Central DB Fix

500 Internal Server Error - Şarkı Stream Hatası Çözümü

27 Aralık 2025 - 04:15

Basit Anlatım (Herkes İçin)

Ne oldu? Muzibu'da şarkı çalmaya çalışınca 500 hatası alınıyordu. Hiçbir şarkı çalmıyordu.

Neden oldu? Sistem, "domains" tablosunu yanlış veritabanında arıyordu. Tıpkı bir dosyayı yanlış klasörde aramak gibi - dosya orada olmadığı için bulamıyordu.

Ne yapıldı? Sisteme "domains tablosu ana veritabanında, oraya bak" dedik. Artık doğru yere bakıyor.

Sonuç: Şarkılar tekrar çalıyor!

Teknik Detaylar (Geliştiriciler İçin)

Hata Mesajı:

SQLSTATE[42S02]: Base table or view not found: 1146
Table 'tenant_muzibu_1528d0.domains' doesn't exist
(Connection: tenant, SQL: select `domain` from `domains` where `tenant_id` = 1001)

Kök Neden:

  • domains tablosu central database'de (tuufi_4ekim)
  • Tenant context aktifken DB sorguları tenant database'e gidiyor
  • DB::table('domains') tenant db'de arıyor → Tablo yok → 500 hatası

Çözüm:

Tüm domains sorgularına DB::connection('mysql') eklendi:

// HATALI (tenant db'ye gider)
DB::table('domains')->where('tenant_id', 1001)->first();

// DOĞRU (central db'ye gider)
DB::connection('mysql')->table('domains')->where('tenant_id', 1001)->first();

Düzeltilen Dosyalar

app/Helpers/TenantHelpers.php :269

getTenantDomain() fonksiyonu - SignedUrlService tarafından kullanılıyor

Bu fonksiyon her şarkı stream isteğinde çağrılıyor, asıl hatanın kaynağı buydu.

app/Jobs/ReissueLetsEncryptCertificate.php :93

getAllDomainAliases() fonksiyonu - SSL sertifika yenileme job'ı

Queue'dan çalışırken tenant context olabilir, önlem alındı.

Modules/Muzibu/Providers/MuzibuServiceProvider.php :165, :184

loadWebRoutes() ve loadApiRoutes() fonksiyonları

Route tanımları için domain listesi alınırken kullanılıyor.

Neden Önemli?

Kullanıcı Etkisi:

  • Hiçbir şarkı çalmıyordu
  • Tüm premium özellikler devre dışıydı
  • Site kullanılamaz durumdaydı

Teknik Etki:

  • Her stream isteği 500 veriyordu
  • Log dosyaları doluyordu
  • Potansiyel SSL sorunları önlendi

Multi-Tenant Sistem Kuralı

Central Database Tabloları:

tenants domains users roles permissions subscriptions

Bu tablolara erişirken her zaman DB::connection('mysql') kullan!