Sivunäyttelijä, joka muutti valikoimamme 502-virheeksi
Toimitus
Sivu, jolla luetellaan kaikki myymämme paketit, vastasi jokaiseen kävijään 502 Bad Gateway -virheellä noin 41 tunnin ajan julkaisun jälkeen. Jokaisen paketin oma sivu toimi, etusivu toimi, kassa toimi. Rikki oleva osa oli muutama rivi, jotka laskivat sivunäyttöjä.
Virhe
Kauppamme palvelin laskee käynnit pakettien sivuille. Jotta se voi selvittää, mihin pakettiin pyyntö kohdistuu, se ottaa polun toisen osan:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
Polulle /kits/studio/ se on studio. Itse valikoiman osalta /kits/ polussa on kaksi kauttaviivaa, joten turvaraja päästi sen läpi, mutta kauttaviivojen poiston jälkeen jäljellä on vain yksi osa, ja [1] aiheutti IndexError-virheen. Käsittelijä on Pythonin vakio-http.server: poikkeus do_GET-metodissa sulkee yhteyden vastauksetta, ja Cloudflare näytti kävijälle 502-virheen.
Korjaus on yksi pieni funktio, joka palauttaa tyhjän merkkijonon, kun osa puuttuu. Näyttölaskuri tarvitsi vain paketin nimen; sen ei koskaan pitänyt pystyä rikkomaan sivua, jota se laski.
Miksi yksikään tarkistuksemme ei havainnut sitä
- Käytettävyyden vahti avasi vain etusivuja. Etusivu oli kunnossa.
- Julkaisuvaihe tarkisti jokaisen lähetetyn paketin: sen sivun, kassauudelleenohjauksen ja maksupolun alusta loppuun. Se ei koskaan avannut kaikkien pakettien luetteloa.
- Analytiikka ei voinut näyttää sitä. Koodi, joka olisi laskenut valikoiman kävijät, oli se koodi, joka kaatui. Palvelinloki oli kertonut vastauksen koko ajan: 17 jäljitysvirhettä (traceback) näiden 41 tunnin aikana, jokainen yksi pyyntö, ihmiseltä tai robottimaisemalta, joka sai virheen sivun sijaan.
Mitä muuttui
- Jokainen sivu, ulkopuolelta, tunnin välein. Pieni työ lukee sitemapin ja avaa jokaisen englanninkielisen sivun ja vuorollaan yhden muista 42 kielestä Cloudflaren kautta kuin kävijä. Kahden peräkkäisen epäonnistuneen ajon jälkeen lähetetään sähköposti; palautuminen lähettää toisen.
- Julkaisuvaihe avaa jokaisen englanninkielisen sivun sen jälkeen kun se on uudelleenrakentanut sivuston, ja kieltäytyy lopettamasta, jos yksi ei vastaa koodilla 200.
- Etusivut lasketaan sivuiksi. Sivut, jotka listaavat muita sivuja, ovat niitä, joille kävijä saapuu ensin, ja ne olivat niitä, joita kukaan ei testannut.
Pääpointti
Sivutyöt pyyntökäsittelijässä, kuten laskenta, lokitus tai seuranta, eivät saa koskaan epäonnistuttaa pyyntöä, ja sivutarkistus, joka kattaa vain juuri muuttamasi sivut, jättää huomiotta niihin linkittävät sivut. Night Watch -vahti ottaa vastaan minkä tahansa sivuluettelon, jossa jokaisella sivulla on oltava tietty teksti, ei vain etusivuja.