شمارنده بازدید که کاتالوگ ما را به 502 تبدیل کرد

ارسال

صفحه‌ای که همه کیت‌هایی که می‌فروشیم را فهرست می‌کند، حدود 41 ساعت پس از راه‌اندازی به هر بازدیدکننده با 502 Bad Gateway پاسخ می‌داد. صفحه هر کیت به‌تنهایی کار می‌کرد، صفحه اصلی کار می‌کرد، پرداخت کار می‌کرد. بخش خراب، چند خطی بود که بازدیدهای صفحه را می‌شمرد.

باگ

سرور فروشگاه ما بازدیدهای صفحات کیت‌ها را می‌شمارد. برای یافتن اینکه درخواست مربوط به کدام کیت است، بخش دوم مسیر را برمی‌داشت:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

برای /kits/studio/ این مقدار studio است. برای خود کاتالوگ، یعنی /kits/، مسیر دو اسلش دارد، بنابراین محافظ اجازه عبور می‌داد، اما پس از حذف اسلش‌ها تنها یک بخش باقی می‌ماند و [1] خطای IndexError ایجاد می‌کرد. هندلر، http.server استاندارد پایتون است: یک استثنا در do_GET اتصال را بدون پاسخ می‌بندد و Cloudflare به بازدیدکننده 502 نشان می‌داد.

راه‌حل، یک تابع کوچک است که در صورت نبودِ بخش مورد نظر، رشته خالی برمی‌گرداند. شمارنده بازدید تنها به نام کیت نیاز داشت؛ هرگز نباید می‌توانست صفحه‌ای را که می‌شمرد، خراب کند.

چرا هیچ‌یک از بررسی‌های ما آن را ندید

چه چیزی تغییر کرد

نکته کلیدی

کارهای جانبی در یک هندلر درخواست، مانند شمارش، ثبت رویدادها یا ردیابی، هرگز نباید باعث شکست درخواست شوند؛ و بررسی صفحه‌ای که فقط صفحات تازه تغییر‌یافته را پوشش می‌دهد، آن‌هایی را که به این صفحات لینک دارند از قلم می‌اندازد. واچ‌داگ موجود در Night Watch هر فهرستی از صفحات را می‌پذیرد که هرکدام باید شامل متنی مشخص باشند، نه فقط صفحه‌های اصلی.

به‌روزرسانی شد: