Consulting Work Tinklaraštis Kontaktai
← Atgal į tinklaraštį

Nurodymas, kuris ištrynė ne tas dvidešimt šešias kalbas

Nurodymas, kuris ištrynė ne tas dvidešimt šešias kalbas

Savo svetainės automatikai liepiau sutrumpinti tinklaraštį iki keturių kalbų. Po dviejų dienų paaiškėjo, kad ji tyliai nušlavė dvidešimt šešias kalbas ir iš pagrindinio puslapio, o to nepastebėjau nei aš, nei nė vienas lankytojas.

TL;DR

  • Nurodymas, skirtas tik tinklaraščio skiltiai, buvo pritaikytas visai svetainei.
  • 26 iš 30 kalbų dingo iš pagrindinio puslapio, CV puslapio ir visų navigacijos eilučių.
  • Niekas nesugedo, jokios 404 klaidos neatsirado, todėl dvi dienas to niekas nepastebėjo.
  • Sprendimas atsirado iš git istorijos, o ne iš atminties, kaip svetainė atrodė anksčiau.
  • Tikroji pamoka: prieš paleidžiant automatinį pakeitimą, reikia įvardyti tikslų failų sąrašą, kurį jis paveiks, ir tą sąrašą perskaityti prieš kažką ištrinant.

Kodėl iš pradžių norėjau mažiau kalbų

Per kelis mėnesius mano svetainė išaugo iki trisdešimties kalbų: pagrindinis puslapis, CV puslapis ir tinklaraštis, kurį atnaujinu beveik kas kelias dienas. Apie tai, kaip tai gali būti pavojinga, jau esu rašęs anksčiau: mašininis vertimas būna pakankamai sklandus, kad atrodytų gerai, ir pakankamai klaidingas, kad sugėdintų tave kalba, kurios pats negali patikrinti. Pagrindinis puslapis ir CV keičiasi retai, tad su tokia rizika galėjau susitaikyti. Su tinklaraščiu buvo kitaip. Nauji įrašai pasirodo dažnai, ir aš tikrai negaliu garantuoti vertimo kokybės, kai straipsnis estų kalba publikuojamas tą pačią dieną, kai parašytas.

Todėl nusprendžiau susiaurinti kalbų, į kurias verčiamas tinklaraštis, sąrašą iki keturių, kurias pats sugebu bent apytiksliai patikrinti: anglų, rusų, vokiečių, čekų. Visos kitos tinklaraštyje nebeliks, kol neatsiras patikimesnis būdas jas patikrinti. Ta plano dalis buvo teisinga. Negerai išėjo tik pats prašymo būdas.

Vienas sakinys, ne ta apimtis

Daviau vieną nurodymą: palikti tinklaraštyje tik keturias kalbas. Trumpas ir konkretus, bent jau taip maniau. Tačiau tai, kas iš tikrųjų įvyko, palietė tris skirtingus dalykus vienu metu. Tinklaraščio turinio aplankai buvo sutvarkyti teisingai, iki keturių kalbų, kaip ir norėjau. Bet kartu buvo perrašytas ir pagrindinis svetainės kalbų sąrašas, konfigūracijos failas, nurodantis, kokios kalbos apskritai egzistuoja, o kitų dvidešimt šešių kalbų turinys pagrindiniame puslapyje ir navigacijos eilutės buvo ištrinti.

Problema ta, kad „tinklaraštis" ir „visos svetainės kalbų sąrašas" gyvena tame pačiame konfigūracijos faile. Jame niekas neatskiria, kurias kalbas palaiko tinklaraštis, o kurias visa svetainė. Pašalink kalbą iš to sąrašo, ir kiekviena skiltis, kuri iš jo skaito duomenis, įskaitant pagrindinį puslapį, ją iškart praranda. Mano nurodymas įvardijo skiltį. Pakeitimas, kuris iš tikrųjų įvyko, apėmė visą svetainę.

Štai kas pavertė tai pavojingu, o ne tik klaidingu: niekas garsiai nesulūžo. Jokios klaidos, jokios 404, jokios build’o klaidos. Svetainė tiesiog tyliai nustojo generuoti pagrindinio puslapio ir CV puslapius dvidešimt šešiomis kalbomis, o kalbų perjungiklis nustojo jas siūlyti. Lankytojas, anksčiau skaitęs svetainę portugalų kalba, tiesiog tyliai atsidurdavo angliškoje versijoje. Dingęs todėl, kad ištrintas, atrodo lygiai taip pat, kaip niekada neegzistavęs, ir nė vienas iš šių atvejų nemeta klaidos.

Prireikė dviejų dienų, kol tai pastebėjau, ir tik atsitiktinai, taisydamas kažką visai kitą, kai navigacijos nuoroda „Blog" vienai kalbai, kurią maniau esant vis dar gyvą, vedė kažkur ne ten. Ta viena pakibusi nuoroda buvo vienintelis matomas siūlas, vedantis prie visos problemos.

Ką iš tikrųjų parodė diff’as

Sąžiningai kalbant, čia klydau ne dėl apimties. Klaida ta, kad prieš paleisdamas pakeitimą niekada nepatikrinau failų sąrašo, kurį jis iš tikrųjų paveiks. Perskaičiau vieno sakinio aprašymą, ką jis turėtų daryti, ir nusprendžiau, kad tai atspindi tai, ką jis iš tikrųjų padarys. Neatspindėjo.

Taisymas prasidėjo nuo vieno klausimo: kas ir kur pasikeitė. Palyginau veikiančią svetainę su paskutiniu commit’u iki „sutrumpink tinklaraštį" nurodymo, ir atsakymas buvo akivaizdus iškart: pagrindinis kalbų konfigūracijos failas, pagrindinio puslapio turinio aplankas ir dvidešimt šeši kalbų eilučių failai, nė vienas iš jų neturėjo nieko bendra su tinklaraščio aplanku. Git’e visi tie failai buvo išsaugoti lygiai tokie, kokie buvo. Iš tikrųjų niekas nebuvo prarasta, tik uždengta nauju įdiegimu.

Iš tos istorijos atkūriau pagrindinio puslapio, CV ir navigacijos eilutes visoms trisdešimčiai kalbų, o tinklaraščio aplanką palikau tokį pat sutrumpintą, koks ir turėjo būti: keturios kalbos, sąmoningai. Vienas galas liko neužrištas. Vienai iš atkurtų kalbų navigacijos nuoroda „Blog" anksčiau vesdavo į to tinklaraščio leidimą ta kalba, kurio dabar jau nebėra. Dubliuoti keturis įrašus dar į dvidešimt šešias kalbas vien tam, kad užpildytum tą vieną nuorodą, neapsimokėjo, tad šablone nustačiau, kad ji nukreiptų į anglišką tinklaraštį, ir taip ir palikau.

Vienas nurodymas, ne ta apimtis: pagrindinio puslapio ir CV kalbų skaičius sumažėjo iki keturių, po dviejų dienų grįžo į trisdešimt, o tinklaraštis liko su keturiomis kalbomis, kurios ir buvo numatytos iš pradžių

Ką kitą kartą tikrinčiau kitaip

Dabar, prieš leisdamas bet kokiam automatiniam pakeitimui paliesti veikiančią, kelių skilčių svetainę, garsiai užduodu vieną papildomą klausimą: kokius tiksliai failus tai paveiks, o ne kokią funkciją tai turėtų sutvarkyti. Jei atsakymas neaiškus, tai signalas sustoti ir patikrinti, o ne paleisti ir pažiūrėti, kas bus. Ir prieš kažką ištrinant, noriu prieš akis turėti realų failų sąrašą, o ne vieno sakinio santrauką, ką nurodymas tariamai reiškė. Apimties žodis nurodyme, „tinklaraštis", „ši komanda", „tik frontendas", automatiškai nereiškia tokios pat apimties, kokia bus pakeitimo, kurį tas nurodymas paleis, ir šie du dalykai sutampa tik tada, kai kažkas iš tikrųjų tai patikrino. Būtent to ir norėčiau paklausti: koks buvo mažiausias, tavo manymu, aiškiausiai apibrėžtas nurodymas, kurį neseniai davei, o niekas taip ir nepatikrino, ką jis iš tikrųjų paveikė?

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