Local ≠ Prod gerçeği (Acı, komik ve öğretici)
Bir yazılımcının kariyer yolculuğu şu üç evreden geçer:
- Junior: “Çalışıyor 🎉”
- Mid: “Edge case olabilir mi 🤔”
- Senior: “Production’da ne olur 😐”
Bu yazı seni 2’den 3’e taşıma yazısıdır.
Hem güleceğiz, hem “ah be” diyeceğiz, hem de gerçekten işe yarayan pratikler öğreneceğiz.
Hazırsan başlıyoruz 👇
Kahveni al ☕, production log’larını kapat (şimdilik).
🧪 1️⃣ Environment Variable Sendromu
“Local’de vardı ama prod’da… kim bu?”
🎭 Hikâye
Local ortamda API çağrısı çalışıyor.
Production’a deploy… BOOM 💣
500 Internal Server Error.
❌ Sorunlu Kod
const apiKey = process.env.API_KEY;
fetch(`https://api.example.com/data?key=${apiKey}`);
🧠 Burada Ne Oluyor?
- Kod
API_KEYbekliyor - Ama production’da bu değişken tanımlı değil
undefinedile API’ye gidiliyor- API diyor ki: “Anahtar nerede kardeşim?”
😇 Local Neden Çalıştı?
Çünkü .env dosyası vardı:
API_KEY=super-secret-key
Production:
.envyok- Ya da yanlış yerde
- Ya da yanlış isimde
✅ Sağlam Çözüm
const apiKey = process.env.API_KEY;
if (!apiKey) {
throw new Error("API_KEY tanımlı değil! Production ağlıyor 😭");
}
🛠️ Pratik İpucu
- Uygulama ayağa kalkarken env kontrolü yap
- Runtime’da patlamasın
🧠 Altın Kural:
“Eksik env ile çalışan uygulama, saatli bombadır.”
📁 2️⃣ Dosya Yolu Faciası
Windows hoşgörülü, Linux acımasızdır
🎭 Hikâye
Local Windows.
Prod Linux.
Dosya bulunamıyor…
❌ Yanlış Kod
const filePath = "uploads\\image.png";
😇 Local
Windows:
“Sorun değil, ben anladım.”
😈 Production
Linux:
“Backslash mı? Yanlış evrendesin.” ❌
✅ Doğru Yaklaşım
import path from "path";
const filePath = path.join("uploads", "image.png");
🧠 Burada Ne Kazandık?
- İşletim sistemi farkını unuttuk
- Kod taşınabilir oldu
- Bir bug daha mezara 🪦
🧠 Altın Kural:
Dosya yolu elle yazılmaz,
pathile yapılır.
🔠 3️⃣ Case Sensitivity (Harf Hassasiyeti)
Local affeder, prod asla
🎭 Hikâye
Deploy sonrası:
Cannot find module './services/userService'
❌ Kod
import UserService from "./services/userService";
📁 Dosya Gerçekte:
UserService.js
😇 Local (Mac / Windows)
“Ben senin ne demek istediğini anladım.”
😈 Production (Linux)
“Hayır. Harf hatası var. Bye.” 👋
✅ Çözüm
- Dosya adları net
- Import’lar birebir
- Otomatik lint kullan
import UserService from "./services/UserService";
🧠 Production Linux’tur.
Bunu kabul edince hayat kolaylaşır.
⏱️ 4️⃣ Timing ve Async Yanılsaması
“Local hızlıydı…”
❌ Tehlikeli Kod
let user;
setTimeout(() => {
user = { name: "Cansu" };
}, 100);
console.log(user.name);
😇 Local
- CPU boş
- Event loop hızlı
- Şans senden yana 🎲
😈 Production
- Trafik var
- Sunucu dolu
userhâlâundefined💥
✅ Doğru Mantık
setTimeout(() => {
const user = { name: "Cansu" };
console.log(user.name);
}, 100);
🧠 Ne Öğrendik?
- Async kodda sıraya güvenme
- Scope’a güven
- Callback / async-await kullan
🧠 Altın Kural:
Timing’e güvenen kod, production’da yalnız kalır.
🌐 5️⃣ CORS: Local’de Melek, Prod’da Şeytan 😈
🎭 Hikâye
Local’de API çalışıyor.
Prod’da tarayıcı bağırıyor:
Blocked by CORS policy
😇 Local
- Proxy açık
- Tarayıcı toleranslı
- Hayat güzel 🌈
😱 Production
- Gerçek domain
- Gerçek güvenlik
- Gerçek kurallar
❌ Eksik Sunucu Ayarı
✅ Express Çözümü
import cors from "cors";
app.use(cors({
origin: "https://yourdomain.com",
methods: ["GET", "POST"]
}));
🧠 İpucu
*ile CORS açmak = “Kapıyı açık bırakmak”- Prod’da asla rastgele açma
🔥 6️⃣ console.log Yalanı
“Local’de gördüm ya…”
❌ Local Alışkanlığı
console.log("User:", user);
😇 Local
- Terminal açık
- Gözünün önünde
😈 Production
- Log başka yerde
- Ya da hiç yok
- Ya da kimse bakmıyor
✅ Gerçek Logging
logger.info("User loaded", {
userId: user.id,
role: user.role
});
🧠 Neden Önemli?
- Hata geçmişi tutulur
- Debug yapılır
- Panic azalır 😌
🧠 console.log = bisiklet tekerleği
Production = araba 🚗
🧨 7️⃣ “Bende Çalışıyor” Cümlesinin Anatomisi
Bu cümle şunları söylemez:
- Kod doğru
- Sistem sağlam
Şunu söyler:
- Ortamlar farklı
Local ≠ Production çünkü:
- OS farklı
- Node versiyonu farklı
- Trafik farklı
- Güvenlik farklı
- Kullanıcı sabırsız 😅
✅ Production Öncesi Hayat Kurtaran Checklist
.enveksiksiz mi?- Node sürümleri aynı mı?
- Linux case test edildi mi?
- Logging var mı?
- Error handling var mı?
- “Bende çalışıyor” cümlesi kurulmadı mı?
🎬 Büyük Benzetme ile Kapanış
- Local: prova sahnesi 🎭
- Production: canlı yayın 📺
Prova sırasında hata yapabilirsin.
Ama canlı yayında… herkes izliyor 😄
🏁 Son Söz
Production şunu ister:
“Beni en kötü senaryoya göre yaz.”
Local ise şunu der:
“Ben idare ederim.”
Ve unutma:
Kodun gerçek sınavı production’dır.
Local sadece fragman 🎞️

