సైట్ యొక్క పబ్లిషింగ్ ప్లాట్ఫారమ్పై నడపబడిన ఒక క్లీనప్ స్క్రిప్ట్, కోడ్ స్నిప్పెట్లను లోపభూయిష్టమైన Liquid వేరియబుల్స్గా తప్పుగా గుర్తించి, వాటిని కలిగి ఉన్న ప్రతి ఆర్టికల్ నుండి తొలగించింది. ఈ లోపం వల్ల పాఠకులు ఆధారపడే ఉదాహరణ కోడ్ లేకుండా డజన్ల కొద్దీ సాంకేతిక పోస్ట్లు మిగిలిపోయాయి, దీనివల్ల అత్యవసరంగా రోల్బ్యాక్ చేయాల్సి వచ్చింది మరియు కంటెంట్ మైగ్రేషన్లను ఎలా పరీక్షించాలో మళ్ళీ ఆలోచించాల్సి వచ్చింది.
ఈ బగ్ ఎలా దొర్లింది
ఈ ప్లాట్ఫారమ్ Liquidని ఉపయోగిస్తుంది, ఇది {{ … }} వంటి ట్యాగ్లతో డైనమిక్ కంటెంట్ను మార్క్ చేసే ఒక టెంప్లేటింగ్ లాంగ్వేజ్. రెండరింగ్ను దెబ్బతీసే అదనపు ట్యాగ్లను తొలగించడం కోసం ఒక సాధారణ మెయింటెనెన్స్ జాబ్ నిర్వహించబడింది. స్క్రిప్ట్ యొక్క పార్సర్, సరిపోలే క్లోజింగ్ ట్యాగ్ లేని ఓపెనింగ్ ట్యాగ్ల కోసం వెతికింది మరియు ఏదైనా దొరికినప్పుడు, ఆ లోపాన్ని "సరిదిద్దడానికి" మొత్తం బ్లాక్ను తొలగించింది.
వాస్తవానికి, కోడ్ బ్లాక్లను చుట్టేసే {% raw %} మరియు {% endraw %} ట్యాగ్లను పార్సర్ గుర్తించడంలో విఫలమైంది. ఆ ట్యాగ్లు లోపల ఉన్న ప్రతిదాన్ని లిటరల్ టెక్స్ట్గా పరిగణించాలని Liquidకి చెబుతాయి, కానీ ఆ బగ్ ఉన్న స్క్రిప్ట్ ఓపెనింగ్ {% raw %}ని క్లోజ్ చేయని వేరియబుల్గా ({{% raw %}) పరిగణించి, చుట్టూ ఉన్న కోడ్ను తొలగించింది. లాగ్ చేయబడిన ఎర్రర్ మెసేజ్:
Liquid syntax error: Variable '{{% raw %}' was not properly terminated.
స్క్రిప్ట్ లైవ్ కంటెంట్ రిపోజిటరీపై పనిచేయడం వల్ల, ఈ తొలగింపు భారీ స్థాయిలో జరిగింది, దీనివల్ల ఒకేసారి ప్రభావితమైన అన్ని ఆర్టికల్స్ నుండి కోడ్ ఉదాహరణలు తుడిచిపెట్టుకుపోయాయి.
ఇందులో ఉన్న ప్రమాదం ఏమిటి
సాంకేతిక వ్యాసాలు భావనలను వివరించడానికి, ఫలితాలను పునరుత్పత్తి చేయడానికి మరియు పాఠకులను దశలవారీ విధానాల ద్వారా నడిపించడానికి కోడ్ స్నిప్పెట్లపై ఆధారపడతాయి. ఆ బ్లాక్లను కోల్పోవడం వల్ల పోస్ట్లు చాలా వరకు నిరుపయోగంగా మారుతాయి, రచయితలు కంటెంట్ను మళ్ళీ రాయాల్సి వస్తుంది మరియు ప్లాట్ఫారమ్ యొక్క విశ్వసనీయతపై నమ్మకం తగ్గుతుంది. నాణ్యమైన డెవలపర్ డాక్యుమెంటేషన్పై తన ప్రతిష్టను నిర్మించుకునే సైట్కు, ఈ సంఘటన పాఠకుల సంఖ్యను మరియు కంట్రిబ్యూటర్ల నమ్మకాన్ని రెండింటినీ దెబ్బతీస్తుంది.
చాలా మంది పాఠకులు గమనించని వివరాలు
- శాండ్బాక్సింగ్ లేకుండా బ్యాచ్ ప్రాసెసింగ్ – స్క్రిప్ట్ను స్టేజింగ్ కాపీపై కాకుండా నేరుగా ప్రొడక్షన్ డేటాపై అమలు చేశారు.
- అసంపూర్ణ ట్యాగ్ హ్యాండ్లింగ్ – కేవలం కొన్ని Liquid ట్యాగ్లను మాత్రమే పరిగణనలోకి తీసుకున్నారు; వైట్లిస్ట్లో
{% raw %}ను చేర్చలేదు. - క్రమబద్ధమైన పరీక్షల లోపం – చిన్న శాంపిల్పై పైలట్ రన్ చేయకుండానే, పూర్తి డేటాసెట్పై ఈ జాబ్ను అమలు చేశారు.
దీనిని ఎలా నివారించవచ్చు
- కాపీపై మైగ్రేషన్లను రన్ చేయండి – ఏదైనా బల్క్ ట్రాన్స్ఫర్మేషన్ను ముందుగా డేటాబేస్ యొక్క శాండ్బాక్స్డ్ వెర్షన్పై వర్తింపజేయండి.
- అన్ని ట్యాగ్ వైవిధ్యాలకు పార్సర్లను యూనిట్-టెస్ట్ చేయండి – రా బ్లాక్లు, కామెంట్ ట్యాగ్లు మరియు నెస్టెడ్ స్ట్రక్చర్ల వంటి ఎడ్జ్ కేస్లను కూడా చేర్చండి.
- క్రమంగా అమలు చేయడం (Gradual rollout) – పరిమిత సంఖ్యలో ఆర్టికల్లను ప్రాసెస్ చేయండి, ఫలితాలను ధృవీకరించండి, ఆపై విస్తరించండి.
వ్యతిరేక వాదన
వేగంగా అభివృద్ధి చెందుతున్న సైట్లకు ప్రతి స్క్రిప్ట్ను పూర్తి బ్యాకప్పై పరీక్షించడం అసాధ్యమని, మరియు డేటా నష్టపోయే ప్రమాదం కంటే వేగవంతమైన పరిష్కారాల అవసరమే ఎక్కువ అని కొందరు వాదిస్తారు. వేగం ముఖ్యమే అయినప్పటికీ, భారీ స్థాయిలో జరిగిన తొలగింపును సరిదిద్దడానికి అయ్యే ఖర్చు – డెవలపర్ సమయం మరియు ప్రతిష్టకు కలిగే నష్టం రెండింటినీ బట్టి చూస్తే – జాగ్రత్తగా అమలు చేయడం వల్ల కలిగే ఆలయం కంటే ఎక్కువగా ఉంటుంది.
తదుపరి ఏం చూడవచ్చు
బృందం బ్యాకప్ల నుండి కోల్పోయిన కోడ్ను పునరుద్ధరించింది మరియు అన్ని Liquid నిర్మాణాలను గుర్తించేలా క్లీనప్ టూల్ను సవరిస్తోంది. వారు అప్డేట్ చేసిన టెస్టింగ్ వర్క్ఫ్లోను వివరిస్తూ ఒక పోస్ట్-మార్టమ్ (post-mortem) నివేదికను ప్రచురించాలని మరియు సవరించిన స్క్రిప్ట్ను బహిరంగంగా పంచుకోవాలని యోచిస్తున్నారు, తద్వారా ఇతర పబ్లిషర్లు కూడా ఇదే తప్పు చేయకుండా ఉండవచ్చు. ఈ సంఘటన ఒక హెచ్చరిక: ఒక చిన్న పార్సింగ్ ఎర్రర్ కూడా రచయిత చేసిన వారాల కృషిని తుడిచిపెట్టగలదు, కాబట్టి కఠినమైన పరీక్షలు తప్పనిసరి.
