Ang view counter na ginawang 502 ang aming catalogue
Shipping
Ang pahina na naglilista ng lahat ng kit na aming ibinebenta ay sumagot sa bawat bisita ng 502 Bad Gateway sa loob ng humigit-kumulang 41 oras pagkatapos ng launch. Gumagana ang sariling pahina ng bawat kit, gumagana ang home page, gumagana ang checkout. Ang sira ay ilang linya na bumibilang ng mga page view.
Ang bug
Ang server ng aming store ay bumibilang ng mga bisita sa mga pahina ng kit. Upang malaman kung para saang kit ang isang request, kinukuha nito ang ikalawang bahagi ng path:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
Para sa /kits/studio/, ito ay studio. Para sa catalogue mismo, /kits/, may dalawang slash ang path, kaya pinagdaan ito ng guard, ngunit pagkatapos alisin ang mga slash, may isang bahagi na lamang, at nag-raise ng IndexError ang [1]. Ang handler ay ang standard na http.server ng Python: ang exception sa do_GET ay nagsasara ng connection nang walang sagot, at ipinakita ng Cloudflare sa bisita ang 502.
Ang ayos ay isang maliit na function na nagbabalik ng empty string kapag wala ang bahagi. Ang view count ay kailangan lamang ng pangalan ng kit; hindi nito kailanman kailangang masira ang pahinang binibilangan nito.
Bakit wala sa aming mga check ang nakakita nito
- Buksan lamang ng uptime watch ang mga home page. Ayos ang home page.
- Tinignan ng release step ang bawat kit na ipinadala: ang pahina nito, ang checkout redirect nito, ang buong paid path. Hindi nito binuksan ang listahan ng lahat ng kit.
- Hindi maipakita ng analytics. Ang code na dapat sana ang bumibilang ng mga bisita ng catalogue ay ang code na nag-crash. Nasa server log ang sagot mula pa noong una: 17 tracebacks sa loob ng 41 oras na iyon, bawat isa ay isang request, mula sa tao o crawler, na nakakuha ng error sa halip na ang pahina.
Ano ang nagbago
- Bawat pahina, mula sa labas, bawat oras. Isang maliit na job ang nagbabasa ng sitemap at binubuksan ang bawat English page at, sa pagkakataon, isa sa iba pang 42 wika, sa pamamagitan ng Cloudflare na parang bisita. Dalawang magkasunod na nabigong run ang nagpapadala ng email; ang recovery ay nagpapadala ng isa pa.
- Binubuksan ng release step ang bawat English page pagkatapos niyang i-rebuild ang site, at tumatanggi itong tapusin kung may isa na hindi sumasagot ng 200.
- Bilangin ang mga index page bilang mga pahina. Ang mga pahinang naglilista ng ibang mga pahina ang unang nararating ng bisita, at sila ang mga hindi sinubukan ng sinuman.
Ang takeaway
Ang mga gawaing panggilid sa isang request handler, tulad ng pagbibilang, pag-log o pag-track, ay hindi dapat kailanman maging dahilan ng pagkabigo ng request, at ang isang page check na sumasaklaw lamang sa mga pahinang bagong binago mo ay hindi nasasaklaw ang mga pahinang nagli-link sa kanila. Ang watch sa Night Watch ay tumatanggap ng anumang listahan ng mga pahina, bawat isa ay may text na dapat nilang laman, hindi lamang ang mga home page.