Tıklama sayacı, katalog sayfamızı 502'ye çevirdi
Teslimat
Tüm Paketlerimizi listeleyen sayfa, lansmandan sonra yaklaşık 41 saat boyunca her ziyaretçiye 502 Bad Gateway yanıtı verdi. Her Paketin kendi sayfası çalışıyordu, ana sayfa çalışıyordu, ödeme çalışıyordu. Bozulan kısım, sayfa görüntülenmelerini sayan birkaç satırdı.
Hata
Mağazamızın sunucusu, Paket sayfalarına yapılan ziyaretleri sayar. Bir isteğin hangi Pakete ait olduğunu bulmak için, yolun ikinci bölümünü alır:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
/kits/studio/ için bu studio'dur. Katalogun kendisi için, /kits/, yolda iki eğik çizgi olduğundan güvenlik kısıtı içeriye aldı, ancak eğik çizgileri temizledikten sonra geriye tek bir bölüm kalır ve [1] bir IndexError fırlattı. İşleyici, Python'un standart http.server'ıdır: do_GET içindeki bir istisna, yanıt vermeden bağlantıyı kapatır ve Cloudflare ziyaretçiye 502 gösterdi.
Düzeltme, bölüm eksik olduğunda boş bir dize döndüren küçük bir fonksiyondur. Görüntülenme sayacı yalnızca Paketin adına ihtiyaç duyar; saydığı sayfayı bozabilmesine hiç gerek yoktu.
Kontrollerimizin hiçbiri bunu neden görmedi
- Çalışma süresi izleyicisi yalnızca ana sayfaları açtı. Ana sayfa iyiydi.
- Sürüm adımı, yayınladığı her Paketi kontrol etti: sayfasını, ödeme yönlendirmesini, ücretli yolu uçtan uca. Tüm Paketlerin listesini hiç açmadı.
- Analitik bunu gösteremedi. Katalog ziyaretçilerini sayacak olan kod, çöken koddun ta kendisiydi. Sunucu günlüğü cevabı baştan beri veriyordu: O 41 saatte 17 iz dökümü, her biri bir istek, bir kişi veya bir tarayıcı tarafından yapılan ve sayfa yerine hata alan.
Neler değişti
- Her sayfa, dışarıdan, her saat. Küçük bir iş, site haritasını okur ve her İngilizce sayfayı ve sırayla diğer 42 dilden birini, bir ziyaretçi gibi Cloudflare üzerinden açar. Arka arkaya iki başarısız çalışma bir e-posta gönderir; kurtarma başka bir tane gönderir.
- Sürüm adımı, siteyi yeniden derledikten sonra her İngilizce sayfayı açar ve biri 200 yanıt vermezse bitmeyi reddeder.
- Dizin sayfaları sayfa sayılır. Diğer sayfaları listeleyen sayfalar, bir ziyaretçinin ilk ulaştığı sayfalardır ve test edilmeyenler de bunlardı.
Çıkarılacak ders
İstek işleyicisindeki yan işler (sayma, günlük kaydı veya izleme gibi) isteği asla başarısız kılmamalı ve yalnızca yeni değiştirdiğiniz sayfaları kapsayan bir sayfa kontrolü, bu sayfalara bağlantı veren diğer sayfaları gözden kaçırır. Night Watch içindeki gözetim mekanizması, yalnızca ana sayfalar değil, her biri bulunması gereken metinle birlikte herhangi bir sayfa listesini alır.