Üretim
--production, hata sayfası, olay kimliği ve dağıtımda dikkat edilecekler.
lexer serve app.lexer --productionya da:
LEXER_ENV=production lexer serve app.lexerÖncelik CLI'dadır: --production verilmişse ortam değişkenine bakılmaz.
Hata sayfası#
Kipin değiştirdiği tek şey budur:
geliştirme: sayfa calistirilamadi: /yol/app.lexer:25:19: tanimsiz degisken: $yok
üretim: sayfa calistirilamadi (olay: 4b17df5d3b21)Ayrıntı log dosyasına aynı kimlikle yazılır. Kullanıcının size bildirdiği kod ile logdaki satırı bulursunuz; tarayıcıya dosya yolu, satır numarası ya da değişken adı sızmaz.
--production verildiğinde --log yazılmamışsa out.log varsayılan olur.
Dinlenecek adres#
$app = new http_server({host: "127.0.0.1", port: 3500})TLS'i ve güvenlik başlıklarını nginx koyuyorsa uygulama dışarıya açık olmamalı. 0.0.0.0 dinlendiğinde siteye nginx'i atlayarak — yani HTTPS'siz ve başlıksız — gelinebilir.
Dağıtımda dikkat#
Yeniden başlatmak gerekiyor#
Sayfalar her istekte diskten okunuyor, bu yüzden bir .md ya da .lx dosyasını değiştirmek için yeniden başlatmak gerekmez. Ama:
- Açılışta kurulan şeyler (arama dizini,
services.onceile açılan bağlantılar) yalnızca yeniden başlatınca tazelenir. - Önbellek dosyanın mtime'ına bakıyor ve
rsync -amtime'ı koruyor; eski bir mtime taşıyan yeni sürüm önbellekte eskimiş kalabilir.
İkisi de aynı çözümle biter:
systemctl restart lexersiteminify#
$app.compress() minify ve gzip'i birlikte açar. Minify gövdedeki boşlukları içerik türüne bakmadan topluyor; robots.txt gibi satır sonu anlamlı olan yanıtlar bundan zarar görüyor. İkisini ayırmak için:
$app.listen({port: 3500, minify: false, gzip: true})İçerik türü#
Bu çalışma zamanında $res.send() Content-Type'ı her koşulda text/html yapıyor. Yalnızca $res.json() doğru türü gönderiyor.
sitemap.xml, robots.txt ve markdown kaynağı gibi adreslerin türünü nginx'te düzeltmek gerekiyor — bkz. nginx ve systemd.
Önemi somut: sitemap text/html olarak gittiği sürece Google Search Console onu "Sitemap bir HTML sayfası" diyerek reddediyor, XML'in kendisi kusursuz olsa bile.
Dosya gönderme yok#
$res içinde diskten dosya sunma yok. favicon.ico, apple-touch-icon.png ve site.webmanifest gibi kökten istenen dosyaları nginx'ten sunmak gerekiyor; tarayıcı ilk ikisini sayfada bir <link> olmasa bile kökten istiyor.
Varlık adreslerine sürüm damgası#
/public/ uzun önbellekle sunuluyorsa damgasız bir adres, dağıtımdan sonra tarayıcıda eski dosyanın kalmasına izin verir:
$doc.head.add(`<link rel="stylesheet" href="/public/lexer.css?v=2026091901">`)Bu yalnızca geç güncelleme değil, bozuk bir ara durum üretir: yeni HTML'deki bir düğme data-tema-dugme taşırken eski JS [data-tema] arıyorsa düğme hiç çalışmaz. CSS ve JS birlikte değiştiği için damga da ortak olmalı ve her dağıtımda artırılmalı.