En Cautionary Tale of Ve: The Bug som kom undan
Förra veckan släppte jag en uppdaterad version av min Innehållsförteckning Creator plugin för WordPress. Jag berömmer mig själv i mina kodning, felsökning och testning förmågor. Att alla kom krascha i en enda natt.
För att göra en lång historia kort, krävs den nya versionen en hjälpare funktion för att visa inlägg poster. Hjälparen funktionen enbart kallades av en funktion och jag därför valt att inkludera hjälpare funktion som ett barn av denna funktion. Detta är vanligt i många språk eftersom det prydligt paketerar alla funktioner och deras medhjälpare i närheten. Föräldern funktion genom det sätt kallas varje gång en sida visas och avslutas omedelbart om den sidan inte innehåller webbplatsen taggen kartan initiativtagare.
Ok. Tiden går. Det är nu 02:00. Koden är nu redo för testet. Jag vet att de överordnade funktionen ut omedelbart om den inte hittar initiativtagare taggen. Detta har tidigare arbetat, och jag gick inte i närheten det, så det bör fortsätta att fungera. Eller hur? Jag kollar sidan platskartan, prova alla nya och gamla alternativ och bevisa att koden fungerar som avsett. Jag synkronisera snabbt SVN repository och rusa iväg till sängs för att få lite sömn innan solen går upp.
Nästa morgon jag bestämmer mig för att kolla en större anläggning vet jag som använder min plugin. Det finns inget substitut för verkliga världen testning. Ja, det ser allt bra ut. Vid det laget såg jag ett inlägg i platskartan som såg intressant. Jag klickade på kategorin länken och presenterades med det första inlägget i kategorin och sedan en stor otäck php felmeddelande. Mmm. Jag tittade på en annan stor plats. Mmm. Kanske en tillfällighet. Låt oss titta på en till. Åh nej!
Så vad gick fel? Kom ihåg att barnet funktion? Jag har hört sägas att barn kan vara onda och det visade sig vara sant i detta fall. Om en bloggsida, kategori sida, tag sida eller ens en hemsida visades, är flera inlägg visas på en enda sida. WordPress gör detta genom att låtsas att varje inlägg är en mini-sida och länkar alla mini-sidorna för att bilda en stor sida. Detta innebär att mina föräldrar funktion kallas flera gånger. Normalt inte ett problem. Men nu som funktionen innehåller barnets funktioner, dessa barn funktioner skapas varje gång föräldern funktionen kallas (även om de inte används). Därför, när sedan andra inlägg visas, kraschar sidan med en dubblett funktionsnamn felmeddelande. Den nett Resultatet blev att en liten bugg i en till synes orelaterade funktion orsakat flera mycket stora webbplatser för att gå ner.
Moralen i historien: om du är en webbplats administratör se till att du kör en fullständig serie test efter varje plugin uppdatering, oavsett hur stor eller liten att plugin kan vara.



















