Бројачот на прегледи што го претвори нашиот каталог во 502

Испорака

Страницата што ги наведува сите комплети што ги продаваме одговори со 502 Bad Gateway на секој посетител околу 41 час по лансирањето. Страницата на секој комплет работеше, почетната страница работеше, плаќањето работеше. Расипаниот дел беа неколку редови што ги броеа прегледите на страниците.

Бубачката

Серверот на нашата продавница ги брои посетите на страниците на комплетите. За да дознае за кој комплет е барањето, го зеде вториот дел од патеката:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

За /kits/studio/ тоа е studio. За самиот каталог, /kits/, патеката има две коси црти, па заштитниот механизам го пушти, но по отстранувањето на косите црти останува само еден дел, а [1] фрли IndexError. Ракувачот е стандардниот http.server на Python: исклучок во do_GET ја затвора врската без одговор, а Cloudflare му прикажа на посетителот 502.

Поправката е една мала функција што враќа празен низ кога делот недостасува. Бројот на прегледи никогаш не требаше ништо освен името на комплетот; никогаш не требаше да може да ја расипа страницата што ја брои.

Зошто ниту една од нашите проверки не го виде тоа

Што се промени

Заклучокот

Помошните задачи во обработувач на барања, како броење, евидентирање или следење, никогаш не смеат да го уништат барањето, а проверка на страница која ги опфаќа само страниците што штотуку сте ги промениле ги пропушта оние што водат кон нив. Watch-от во Night Watch зема било која листа на страници, секоја со текст што мора да го содржи, а не само почетни страници.

Ажурирано: