Consulting Work Emuārs Kontakti
← Atpakaļ uz emuāru

Norādījums, kas izdzēsa nepareizās divdesmit sešas valodas

Norādījums, kas izdzēsa nepareizās divdesmit sešas valodas

Es liku savas vietnes automatizācijai saīsināt blogu līdz četrām valodām. Pēc divām dienām noskaidroju, ka tā pa klusu bija izdzēsusi divdesmit sešas valodas arī no sākumlapas, un to nebija pamanījis ne es, ne kāds no apmeklētājiem.

TL;DR

  • Viens norādījums, kas bija paredzēts tikai blogam, tika pielietots visai vietnei.
  • 26 no 30 valodām pazuda no sākumlapas, CV lapas un visām navigācijas rindiņām.
  • Nekas nesalūza un neviena 404 kļūda neparādījās, tāpēc divas dienas to neviens nepamanīja.
  • Labojums nāca no git vēstures, nevis no atmiņas par to, kā vietne izskatījās agrāk.
  • Īstā mācība: pirms automātiskas izmaiņas palaišanas nosauc precīzu failu sarakstu, ko tā skars, un izlasi šo sarakstu, pirms kaut kas tiek izdzēsts.

Kāpēc sākotnēji gribēju mazāk valodu

Dažu mēnešu laikā mana vietne bija izaugusi līdz trīsdesmit valodām: sākumlapa, CV lapa un blogs, ko atjaunoju gandrīz ik pa dažām dienām. Par to, cik bīstami tas var būt, jau esmu rakstījis agrāk: mašīntulkojums ir pietiekami tekošs, lai izskatītos labi, un pietiekami nepareizs, lai sagādātu neveiklību valodā, kuru pats nevari pārbaudīt. Sākumlapa un CV mainās reti, tāpēc ar šo risku tur varēju samierināties. Ar blogu bija citādi. Jauni ieraksti iznāk bieži, un es godīgi nevaru galvot par svaiga raksta tulkojuma kvalitāti igauņu valodā tajā pašā dienā, kad tas tiek publicēts.

Tāpēc nolēmu sašaurināt valodu kopu, kurās tiek tulkots blogs, līdz četrām, kuras pats spēju vismaz aptuveni pārbaudīt: angļu, krievu, vācu, čehu. Visas pārējās blogā paliek izslēgtas, kamēr neatrodu labāku veidu, kā tās pārbaudīt. Šī plāna daļa bija pareiza. Nepareizi bija tas, kā es to pieprasīju.

Viens teikums, nepareizs tvērums

Devu vienu norādījumu: atstāt blogā tikai četras valodas. Īsi un konkrēti, vismaz tā man šķita. Bet tas, kas patiesībā tika izpildīts, vienlaikus skāra trīs pavisam dažādas lietas. Bloga satura mapes tika pareizi saīsinātas līdz vēlamajām četrām valodām. Taču kopā ar to tika pārrakstīts arī vietnes galvenais valodu saraksts — konfigurācijas fails, kas nosaka, kādas valodas vispār pastāv —, un no sākumlapas satura un navigācijas rindiņām tika izdzēstas pārējās divdesmit sešas valodas.

Problēma ir tā, ka “blogs” un “visas vietnes valodu saraksts” dzīvo vienā un tajā pašā konfigurācijas failā. Nekas šajā failā nenošķir, kuras valodas atbalsta blogs un kuras — visa vietne. Izņem valodu no šī saraksta, un katra sadaļa, kas no tā lasa datus, ieskaitot sākumlapu, to zaudē uzreiz. Mans norādījums nosauca sadaļu. Izmaiņa, kas patiesībā notika, aptvēra visu.

Un tieši šis fakts padarīja to bīstamu, nevis tikai kļūdainu: nekas skaļi nesalūza. Nekādas kļūdas, nekādas 404, nekādas build’a kļūdas. Vietne vienkārši pa klusu pārstāja ģenerēt sākumlapas un CV lapas divdesmit sešām valodām, un valodu pārslēdzējs vairs tās nepiedāvāja. Apmeklētājs, kurš agrāk lasīja vietni portugāļu valodā, tagad vienkārši pa klusu nonāca angļu versijā. Izdzēsts izskatās tieši tāpat kā nekad neeksistējis, un neviens no šiem gadījumiem nemet kļūdu.

Pagāja divas dienas, pirms to pamanīju, un arī tad tikai nejauši, labojot kaut ko pavisam citu, kad navigācijas saite “Blog” vienai no valodām, kuru domāju esam vēl dzīvu, veda kaut kur dīvaini. Tā vienīgā karājošā saite bija vienīgais redzamais pavediens, kas veda atpakaļ pie visas problēmas.

Ko patiesībā parādīja diff

Godīgi sakot, kļūda šeit nav pati tvēruma kļūda. Kļūda ir tā, ka es nekad nepārbaudīju failu sarakstu, ko izmaiņa patiesībā skars, pirms ļāvu tai palaisties. Izlasīju vienas rindiņas aprakstu par to, kam tā vajadzēja darīt, un pieņēmu, ka tas apraksta arī to, ko tā darīja. Neaprakstīja.

Labošana sākās ar vienu jautājumu: kas mainījās un kur. Salīdzināju (diff) darbojošos vietni ar pēdējo commit’u pirms norādījuma “saīsināt blogu”, un atbilde bija tūlītēja un nepārprotama: galvenais valodu konfigurācijas fails, sākumlapas satura mape un divdesmit seši valodu virkņu faili — neviens no tiem pat tuvu nebija bloga mapei. Git bija saglabājis katru no šiem failiem tieši tādu, kāds tas bija. Patiesībā nekas nebija pazaudēts, tikai pārklāts ar jaunāku izvietojumu.

No šīs vēstures atjaunoju sākumlapas, CV un navigācijas rindiņas visām trīsdesmit valodām, bet bloga mapi atstāju tieši tik saīsinātu, cik biju gribējis: četras valodas, apzināti. Viena vaļēja lieta gan palika. Kādai no atjaunotajām valodām navigācijas saite “Blog” agrāk veda uz šīs valodas bloga versiju, kuras tagad vairs nav. Dublēt četrus ierakstus vēl divdesmit sešās valodās tikai tāpēc, lai aizpildītu vienu saiti, nebija vērts, tāpēc šablonā iestatīju, lai tā tā vietā novirza uz angļu valodas blogu, un tā arī atstāju.

Viens norādījums, nepareizs tvērums: sākumlapas/CV valodu skaits sabruka līdz četrām un pēc divām dienām atlēca atpakaļ uz trīsdesmit, kamēr blogs palika ar četrām valodām, kas patiešām bija paredzētas

Ko nākamreiz pārbaudītu citādi

Tagad, pirms ļauju jebkurai automātiskai izmaiņai skart aktīvu, vairāku sadaļu vietni, es skaļi uzdodu vienu papildu jautājumu: kādus tieši failus tas skars, nevis kādu funkciju tam vajadzētu izlabot. Ja atbilde ir neskaidra, tas ir signāls apstāties un pārbaudīt, nevis palaist un paskatīties, kas notiks. Un pirms kaut kas tiek izdzēsts, gribu redzēt reālu failu sarakstu, nevis vienas rindiņas kopsavilkumu par to, ko norādījums, iespējams, nozīmēja. Tvēruma vārds norādījumā — “blogs”, “šī komanda”, “tikai frontends” — automātiski nenozīmē to pašu tvērumu, kāds ir izmaiņai, ko šis norādījums izraisa, un abi sakrīt tikai tad, ja kāds to patiešām pārbaudīja: tieši to es tagad jautāju arī tev. Kāds ir mazākais, visdrošāk noteiktais norādījums, ko esi devis pēdējā laikā un kurš tā arī netika pārbaudīts pret to, ko tas patiešām skāra?

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