İçeriğe geç
LexerLangv0.1.0

Üretim

--production, hata sayfası, olay kimliği ve dağıtımda dikkat edilecekler.

Terminal
lexer serve app.lexer --production

ya da:

Terminal
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:

Metin
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#

LexerLang
$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.once ile açılan bağlantılar) yalnızca yeniden başlatınca tazelenir.
  • Önbellek dosyanın mtime'ına bakıyor ve rsync -a mtime'ı koruyor; eski bir mtime taşıyan yeni sürüm önbellekte eskimiş kalabilir.

İkisi de aynı çözümle biter:

Terminal
systemctl restart lexersite

minify#

$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:

LexerLang
$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:

LexerLang
$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ı.

Sırada#

nginx ve systemd.