Consulting Work Блог Контакт
← Обратно към блога

Инструкцията, която изтри грешните двайсет и шест езика

Инструкцията, която изтри грешните двайсет и шест езика

Казах на автоматизацията на собствения си сайт да смъкне блога до четири езика. Два дни по-късно разбрах, че тихомълком беше изтрила и двайсет и шест езика от началната страница, и нито аз, нито който и да е посетител бяха забелязали.

TL;DR

  • Една инструкция, насочена към секцията с блога, се приложи върху целия сайт.
  • 26 от 30 езика изчезнаха от началната страница, от страницата с автобиографията и от всеки низ в навигацията.
  • Нищо не гръмна, нищо не даде 404, затова никой не забеляза цели два дни.
  • Поправката дойде от историята в git, не от паметта ми за това как е изглеждал сайтът.
  • Истинският урок: преди да пуснеш автоматизирана промяна, назови точния списък от файлове, които тя ще пипне, и го прочети, преди нещо да бъде изтрито.

Защо изобщо исках по-малко езици

Сайтът ми беше набъбнал до трийсет езика за няколко месеца: началната страница, страницата с автобиографията и блог, който обновявам почти през ден. Вече бях писал за това колко опасно става това: машинният превод е достатъчно гладък, за да изглежда наред, и достатъчно грешен, за да те изложи, на език, който лично ти не можеш да провериш. Началната страница и автобиографията се менят рядко, така че този риск там мога да го понеса. Блогът е друга история. Нови статии излизат често, и честно казано не мога да гарантирам за качеството на превода на прясна статия на естонски в деня, в който излиза.

Затова реших да свия набора от езици, на които се превежда блогът, до четирите, на които наистина си вярвам да направя проверка: английски, руски, немски, чешки. Всичко останало отпада от блога, докато не намеря по-надежден начин да го проверявам. Дотук планът беше разумен. Проблемът беше как формулирах заявката.

Едно изречение, грешен обхват

Дадох една-единствена инструкция: сведи блога до четири езика. Кратко и конкретно, поне така си мислех. Това, което реално се изпълни, засегна три различни неща едновременно. Наистина сви папките със съдържание на блога до четирите езика, които исках. Но освен това пренаписа и главния списък с езици на сайта, конфигурационния файл, който казва кои езици изобщо съществуват, и изтри съдържанието на началната страница и навигационните низове за останалите двайсет и шест.

Проблемът е, че „блогът" и „целият списък с езици на сайта" живеят в един и същ конфигурационен файл. Нищо в него не разграничава кои езици поддържа блогът от кои поддържа сайтът като цяло. Махнеш ли един език от този списък, всяка секция, която чете оттам, включително началната страница, го губи наведнъж. Моята инструкция сочеше към една секция. Промяната, която реално се изпълни, имаше обхвата на всичко.

Ето кое я направи опасна, а не просто грешна: нищо не се провали шумно. Никаква грешка, никакъв 404, никакъв провален билд. Сайтът просто тихо спря да генерира страници за началната страница и автобиографията на двайсет и шест езика, а превключвателят на езици спря да ги предлага. Посетител, който преди е чел сайта на португалски, просто тихо се приземяваше на английски вместо това. Липсващо-защото-изтрито изглежда точно като никога-не-съществувало, и никое от двете не хвърля грешка.

Минаха два дни, преди да го хвана, и то по случайност, по средата на несвързана поправка, когато линк „Блог" в навигацията сочеше нанякъде накриво за един от езиците, за които мислех, че още работят. Точно този единствен провиснал линк беше единствената видима нишка обратно към целия проблем.

Какво всъщност показа разликата

Истинският провал тук не е самата грешка в обхвата. Той е, че никога не проверих списъка с файлове, които промяната реално щеше да пипне, преди да я пусна. Прочетох едноредово описание на това какво трябва да прави и приех, че то описва какво прави. Не беше така.

Поправката започна с един въпрос: какво се е променило и къде. Сравних живия сайт с последния commit преди инструкцията „сведи блога", и отговорът беше моментален и недвусмислен: главният конфигурационен файл за езиците, папката със съдържание на началната страница и двайсет и шест файла с низове по езици, нито един от които близо до директорията на блога. Git имаше всеки от тези файлове точно такъв, какъвто е бил. Нищо не беше реално изгубено, само презаписано.

Възстанових началната страница, автобиографията и навигационните низове за всичките трийсет езика от тази история и оставих папката на блога точно толкова свита, колкото исках: четири езика, нарочно. Остана един незавършен край. Линкът „Блог" в навигацията за възстановен език преди сочеше към издание на блога на този език, което вече не съществува. Да дублирам четири статии в още двайсет и шест езика само за да запълня този единствен линк не си струваше, затова настроих шаблона да го пренасочва към английския блог и го оставих така.

Една инструкция, грешен обхват: езиците на началната страница и автобиографията се сринаха до четири и се върнаха обратно до трийсет два дни по-късно, докато блогът остана на четирите езика, които наистина бяха замислени

Какво бих проверявал различно следващия път

Преди да оставя каквато и да е автоматизирана промяна да пипне жив, многосекционен сайт, сега си задавам един допълнителен въпрос на глас: назови точните файлове, които това ще засегне, не функцията, която трябва да поправи. Ако отговорът е неясен, това е сигналът да спра и да проверя, а не да я пусна и да видя какво ще стане. И преди нещо да бъде изтрито, искам действителния списък с файлове пред себе си, не едноредово резюме на това какво е трябвало да значи инструкцията. Дума за обхват в една инструкция, „блогът", „този екип", „само фронтендът", не е автоматично същото като обхвата на промяната, която тази инструкция задейства, и двете съвпадат само ако нещо реално е проверило това: което е точно въпросът, който бих задал на теб. Коя е най-малката, най-уверено дефинирана инструкция, която си давал напоследък и която никога не е била проверена срещу това, което реално е засегнала?

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