Consulting Work Blog Kapcsolat
← Vissza a bloghoz

Az utasítás, amely a rossz huszonhat nyelvet törölte

Az utasítás, amely a rossz huszonhat nyelvet törölte

Megmondtam a saját oldalam automatizálásának, hogy szűkítse a blogot négy nyelvre. Két nappal később kiderült, hogy csendben huszonhat nyelvet törölt le a főoldalról is, és ezt sem én, sem egyetlen látogató nem vette észre.

TL;DR

  • Egy utasítás, ami a blog szekciónak szólt, az egész oldalra lefutott.
  • A harminc nyelvből huszonhat eltűnt a főoldalról, a CV oldalról és minden navigációs szövegből.
  • Semmi nem omlott össze, semmi nem dobott 404-es hibát, így két napig senki nem vette észre.
  • A javítás a git history-ból jött, nem abból, hogy emlékeztem, hogyan nézett ki régen az oldal.
  • A valódi tanulság: mielőtt egy automatizált változtatás lefut, nevezd meg pontosan, mely fájlokat fogja érinteni, és azt a listát olvasd el, mielőtt bármi törlődik.

Miért akartam eleve kevesebb nyelvet

Az oldalam pár hónap alatt harminc nyelvre nőtt: főoldal, CV oldal és egy blog, amit szinte minden pár napban frissítek. Már írtam korábban arról, mennyire veszélyes ez: a gépi fordítás elég gördülékeny ahhoz, hogy jónak tűnjön, és elég rossz ahhoz, hogy kellemetlen helyzetbe hozzon, méghozzá olyan nyelven, amit magam nem tudok leellenőrizni. A főoldal és a CV alig változik, úgyhogy ott elviseltem ezt a kockázatot. A bloggal más volt a helyzet. Gyakran jönnek ki új posztok, és őszintén szólva nem tudok kezeskedni egy aznap megjelenő észt cikk fordításának minőségéért.

Úgyhogy úgy döntöttem, leszűkítem a blog fordítási nyelveinek körét arra a négyre, amit tényleg magam is le tudok ellenőrizni: angol, orosz, német, cseh. Minden más kikerül a blogból, amíg nincs jobb módszerem az ellenőrzésükre. Ez a rész rendben is volt. Az ment félre, ahogyan megfogalmaztam.

Egy mondat, rossz hatókör

Egyetlen utasítást adtam: a blogot tartsuk négy nyelven. Rövid, konkrét, legalábbis azt hittem. Ami valójában lefutott, az egyszerre három dolgot érintett. Helyesen leszűkítette a blog saját tartalommappáit a kívánt négyre. Emellett átírta az oldal fő nyelvlistáját is, azt a konfigurációs fájlt, amely megmondja, milyen nyelvek léteznek egyáltalán, és törölte a főoldal tartalmát és a navigációs szövegeket a másik huszonhat nyelven.

A baj az, hogy „a blog” és „az egész oldal nyelvlistája” ugyanabban a konfigurációs fájlban lakik. Semmi nincs abban a fájlban, ami megkülönböztetné, mely nyelveket támogat a blog, és melyeket az oldal egésze. Ha kiveszel egy nyelvet abból a listából, minden szekció, ami onnan olvas, a főoldalt is beleértve, egy csapásra elveszíti azt. Az utasításom egy szekciót nevezett meg. A ténylegesen lefutott változtatás hatóköre az egész oldal volt.

Attól lett ez inkább veszélyes, mint egyszerűen hibás, hogy semmi nem tört el hangosan. Nem volt hibaüzenet, nem volt 404, nem volt sikertelen build. Az oldal csak csendben leállt a főoldal és a CV generálásával huszonhat nyelven, a nyelvváltó pedig többé nem kínálta fel őket. Aki korábban portugálul olvasta az oldalt, az most szó nélkül angolra landolt. A törölt és a soha nem is létezett pontosan ugyanúgy néz ki, és egyik sem dob hibát.

Két nap telt el, mire észrevettem, és csak véletlenül, egy másik javítás közepén, amikor egy „Blog” link a navigációban furcsa helyre mutatott az egyik nyelvnél, amiről azt hittem, még mindig él. Az az egy árva link volt az egyetlen látható szál, ami visszavezetett az egész problémához.

Amit a diff valójában mutatott

Az igazi hiba itt nem maga a hatókör-tévesztés. Hanem az, hogy sosem néztem meg előre, mely fájlokat fogja ténylegesen érinteni a változtatás, mielőtt hagytam lefutni. Elolvastam egy egysoros leírást arról, mit kellene csinálnia, és feltételeztem, hogy az írja le azt is, mit csinált valójában. Nem így volt.

A javítás egyetlen kérdéssel kezdődött: mi változott, és hol. Összehasonlítottam az élő oldalt az utolsó, a „szűkítsük a blogot” utasítás előtti commitban lévő állapottal, és a válasz azonnali volt és egyértelmű: a fő nyelvi konfiguráció, a főoldal tartalommappája és huszonhat nyelvenkénti szövegfájl, egyik sem volt a blog könyvtára közelében. A gitben minden fájl pontosan úgy megvolt, ahogy volt. Semmi nem veszett el ténylegesen, csak felülíródott a deployon.

Visszaállítottam a főoldalt, a CV-t és a navigációs szövegeket mind a harminc nyelven a git history-ból, és a blog mappát pontosan olyan szűkre hagytam, amilyenre akartam: négy nyelv, szándékosan. Egy elvarratlan szál maradt. A „Blog” navigációs link egy visszaállított nyelvnél egy olyan blogkiadásra mutatott, ami már nem létezik. Nem érte meg négy posztot lefordíttatni még huszonhat nyelvre, csak hogy azt az egy linket kitöltsem, úgyhogy inkább úgy állítottam be a sablont, hogy az angol blogra irányítson át, és ott is hagytam.

Egy utasítás, rossz hatókör: a főoldal és a CV nyelvei négyre zsugorodtak, majd két nap múlva visszaugrottak harmincra, miközben a blog a ténylegesen szándékolt négy nyelven maradt

Mit csinálnék legközelebb másképp

Mielőtt bármilyen automatizált változtatást hagynék hozzányúlni egy élő, több szekcióból álló oldalhoz, most már felteszek egy plusz kérdést, hangosan: nevezd meg a pontos fájlokat, amiket ez érinteni fog, ne a funkciót, amit javítania kellene. Ha a válasz homályos, az a jel, hogy állj meg és ellenőrizz, ne hogy futtasd le és majd meglátod. És mielőtt bármi törlődik, a tényleges fájllistát akarom magam előtt látni, nem egy egysoros összefoglalót arról, mit jelentett volna az utasítás. Egy utasításban szereplő hatókört jelző kifejezés, mint hogy „a blog”, „ez a csapat” vagy „csak a frontend”, nem automatikusan ugyanaz, mint annak a változtatásnak a hatóköre, amit az utasítás ténylegesen elindít, és a kettő csak akkor egyezik, ha valaki tényleg leellenőrizte, hogy egyezik: pontosan ez az a kérdés, amit most visszakérdeznék tőled. Mi volt a legutóbbi, a lehető legszűkebbre szabottnak hitt utasításod, amit sosem vetettél össze azzal, amit ténylegesen érintett?

Need something like this for your own business? See how I can help →