સાઇટના પબ્લિશિંગ પ્લેટફોર્મ પર ચલાવવામાં આવેલી એક ક્લીનઅપ સ્ક્રિપ્ટે ભૂલથી કોડ સ્નિપેટ્સને ખોટી રીતે લખાયેલા Liquid વેરિયેબલ્સ તરીકે ઓળખી લીધા અને તેમાં રહેલા દરેક લેખમાંથી તેને દૂર કરી દીધા. આ ખામીને કારણે ડઝનબંધ ટેકનિકલ પોસ્ટ્સ તે ઉદાહરણ કોડ વગરની બની ગઈ જેના પર વાચકો નિર્ભર હોય છે, જેના કારણે તાત્કાલિક રોલબેક અને કન્ટેન્ટ માઈગ્રેશન કેવી રીતે ટેસ્ટ કરવું તેના પર ફરીથી વિચાર કરવાની જરૂર પડી.

આ બગ કેવી રીતે છૂટી ગયો

પ્લેટફોર્મ Liquid નો ઉપયોગ કરે છે, જે એક ટેમ્પલેટિંગ લેંગ્વેજ છે જે {{ … }} જેવા ટેગ્સ સાથે ડાયનેમિક કન્ટેન્ટને માર્ક કરે છે. એક નિયમિત જાળવણી કાર્યનો હેતુ એવા વધારાના ટેગ્સને દૂર કરવાનો હતો જે રેન્ડરિંગમાં ખલેલ પહોંચાડી શકે છે. સ્ક્રિપ્ટના પાર્સરે એવા ઓપનિંગ ટેગ્સ શોધ્યા જેમાં મેચિંગ ક્લોઝિંગ ટેગ નહોતો અને જ્યારે તેને આવો ટેગ મળ્યો, ત્યારે ભૂલને “સુધારવા” માટે તેણે આખો બ્લોક ડિલીટ કરી દીધો.

વ્યવહારમાં, પાર્સર {% raw %} અને {% endraw %} ટેગ્સને ઓળખવામાં નિષ્ફળ રહ્યો જે કોડ બ્લોક્સને આવરી લે છે. તે ટેગ્સ Liquid ને સૂચના આપે છે કે અંદરની તમામ બાબતોને લિટરલ ટેક્સ્ટ તરીકે ગણવામાં આવે, પરંતુ ભૂલવાળી સ્ક્રિપ્ટે ઓપનિંગ {% raw %} ને અપૂર્ણ વેરિયેબલ ({{% raw %}) તરીકે ગણ્યું અને તેની આસપાસનો કોડ દૂર કરી દીધો. લોગ થયેલ એરર મેસેજ હતો:

Liquid syntax error: Variable '{{% raw %}' was not properly terminated.

કારણ કે સ્ક્રિપ્ટ લાઇવ કન્ટેન્ટ રિપોઝિટરી પર કામ કરી રહી હતી, તેથી આ કાઢી નાખવાની પ્રક્રિયા મોટા પાયે થઈ, જેના કારણે એક જ વારમાં તમામ અસરગ્રસ્ત લેખોમાંથી કોડ ઉદાહરણો ભૂંસાઈ ગયા.

શું જોખમમાં છે

ટેકનિકલ લેખો ખ્યાલો સમજાવવા, પરિણામો ફરીથી મેળવવા અને વાચકોને સ્ટેપ-બાય-સ્ટેપ પ્રક્રિયાઓ દ્વારા માર્ગદર્શન આપવા માટે કોડ સ્નિપેટ્સ પર આધાર રાખે છે. આ બ્લોક્સ ગુમાવવાથી પોસ્ટ્સ મોટાભાગે નકામી બની જાય છે, લેખકોને કન્ટેન્ટ ફરીથી લખવા માટે મજબૂર કરે છે અને પ્લેટફોર્મની વિશ્વસનીયતા પર વિશ્વાસ ઘટાડે છે. જે સાઇટ ઉચ્ચ ગુણવત્તાવાળા ડેવલપર ડોક્યુમેન્ટેશન પર પોતાની પ્રતિષ્ઠા બનાવે છે, તેના માટે આ ઘટના વાચકો અને યોગદાન આપનારાઓના સદ્ભાવ બંને માટે જોખમ ઊભું કરે છે.

વિગતો જે મોટાભાગના વાચકો ચૂકી જાય છે

  • સેન્ડબોક્સિંગ વગર બેચ પ્રોસેસિંગ – સ્ક્રિપ્ટ સ્ટેજિંગ કોપીને બદલે સીધી પ્રોડક્શન ડેટા પર ચલાવવામાં આવી હતી.
  • અપૂરતું ટેગ હેન્ડલિંગ – માત્ર અમુક Liquid ટેગ્સને જ ધ્યાનમાં લેવામાં આવ્યા હતા; વ્હાઇટલિસ્ટમાંથી {% raw %} ને બાકાત રાખવામાં આવ્યું હતું.
  • ઇન્ક્રીમેન્ટલ ટેસ્ટિંગનો અભાવ – નાના સેમ્પલ પર પાયલોટ રન કર્યા વગર આ કાર્ય આખા ડેટાસેટ પર લાગુ કરવામાં આવ્યું હતું.

આને કેવી રીતે અટકાવી શકાયું હોત

  • કોપી પર માઈગ્રેશન ચલાવો – કોઈપણ બલ્ક ટ્રાન્સફોર્મેશન પહેલા ડેટાબેઝના સેન્ડબોક્સ વર્ઝન પર લાગુ કરો.
  • તમામ ટેગ વેરિએશન સામે પાર્સર્સનું યુનિટ-ટેસ્ટ કરો – raw બ્લોક્સ, કોમેન્ટ ટેગ્સ અને નેસ્ટેડ સ્ટ્રક્ચર્સ જેવા એજ કેસનો સમાવેશ કરો.
  • ધીમે ધીમે રોલઆઉટ કરો – મર્યાદિત સંખ્યામાં લેખો પ્રોસેસ કરો, પરિણામો તપાસો, અને પછી સ્કેલ અપ કરો.

વિરોધ પક્ષ

કેટલાક લોકો દલીલ કરે છે કે ઝડપથી બદલાતી સાઇટ્સ માટે સંપૂર્ણ બેકઅપ પર દરેક સ્ક્રિપ્ટનું પરીક્ષણ કરવું અવ્યવહાર્ય છે, અને ડેટા ગુમ થવાનું જોખમ ઝડપી સુધારાઓની જરૂરિયાત કરતા ઓછું છે. જોકે ઝડપ મહત્વની છે, પરંતુ મોટા પાયે ડિલીટ થયેલ ડેટાને પાછો લાવવાનો ખર્ચ – ડેવલપરનો સમય અને પ્રતિષ્ઠાને થતું નુકસાન બંને – ઘણીવાર સાવચેતીપૂર્વક રોલઆઉટ કરવાથી થતા વિલંબ કરતા વધી જાય છે.

હવે આગળ શું જોવું

ટીમે બેકઅપમાંથી ગુમ થયેલ કોડ પુનઃસ્થાપિત કર્યો છે અને તમામ Liquid કન્સ્ટ્રક્ટ્સને ઓળખવા માટે ક્લીનઅપ ટૂલને સુધારી રહી છે. તેઓ અપડેટ કરેલ ટેસ્ટિંગ વર્કફ્લોની વિગતો સાથે પોસ્ટ-મોર્ટમ પ્રકાશિત કરવાની અને સુધારેલી સ્ક્રિપ્ટ જાહેરમાં શેર કરવાની યોજના બનાવી રહ્યા છે જેથી અન્ય પ્રકાશકો સમાન ભૂલથી બચી શકે. આ ઘટના એક યાદ અપાવનારી છે: એક નાની પાર્સિંગ ભૂલ પણ લેખકના અઠવાડિયાના પ્રયત્નોને ભૂંસી શકે છે, જે સખત પરીક્ષણને અનિવાર્ય બનાવે છે.