عشرات الأصول تعيد خطأ 500 بشكل عشوائي

عند زيارة موقعي، أحيانًا أواجه مجموعة من أخطاء 500 في جميع ملفات JavaScript، وعادةً ما يحدث ذلك عند أول تحميل للصفحة (حتى إذا كانت الملفات مخزنة في ذاكرة التخزين المؤقت أو ينبغي أن تكون كذلك). أحيانًا تظهر رسائل مثل NS_ERROR_CORRUPTED_CONTENT.

يتم تحميل قالبي بشكل صحيح (تم إزالة الخلفية للوضوح)، ولكن بخلاف ذلك لا ينبغي أن يكون هناك أي شيء يسبب هذه المشكلة. يتم حل المشكلة بالانتظار لمدة 30 ثانية وإعادة التحميل.

موقعي محدّث تقريبًا إلى أحدث التزامن (متأخر بنزلين)، ولا يوجد شيء غريب في السجلات. مجموعة أقراص التخزين الخاصة بي سليمة. ما الذي يسبب هذه المشكلة وكيف يمكنني إصلاحها؟

كانت تخميني الأول يشير إلى مشكلة في تحسينات Cloudflare - تأكد من إيقاف تشغيل “Rocket Launcher” (من المرجح أنه معطل بالفعل، لكن من الجيد التحقق من ذلك).

أيضًا، أعتقد أنك قد ترغب في تكوين تخزين كائنات دلو S3 باستخدام Cloudflare R2 إذا كنت ترغب في الاستمرار في استخدام الأجهزة التي تستخدمها حاليًا.

لقد ذكرت في محادثتنا أنك تستخدم بعض أقراص SSD القديمة المتبرع بها وقمت بتثبيتها قبل وقت قصير من بدء حدوث هذه المشكلة، وهو ما يُعد مؤشرًا قويًا على المشكلة - حيث تشير برامج Dell الثابتة (Firmware) إلى أنها تالفة، بينما يُظهر smartctl أنها تعمل بشكل طبيعي. أعتقد أن برنامج Dell الثابت يضيء باللون البرتقالي لأنه يكشف عن زمن استجابة عالي واستجابات I/O غير منتظمة أو دعم غير كافٍ للبرنامج الثابت. تطلب Discourse من الأقراص قراءة عشرات ملفات JavaScript المُجمَّعة في نفس الوقت تمامًا، وأقراص SSD القديمة غير المدعومة قد تتعثر تحت هذا الانفجار المفاجئ في عمليات I/O. يتعطل متحكم التخزين أثناء محاولة جلب البيانات، وينتهي الوقت المحدد له بعد 30 ثانية بالضبط - وهو مهلة شائعة لأجهزة SCSI/الأجهزة الكتلية.

نظرًا لأن الأقراص تتعطل لمدة 30 ثانية، فإن Discourse وRails/nginx يتعطلان أو ينتهي وقتهما المحدد أثناء محاولة جلب الملفات ويُرجعان خطأ 500. من المرجح أن Cloudflare تلتقط أخطاء 500 وتطبق رؤوسًا غير صحيحة ثم تمررها إلى المتصفح، مما يتسبب في ظهور NS_ERROR_CORRUPTED_CONTENT الذي تراه.

استبدل تلك الأقراص SSD، أو إذا كان لا بد من استخدامها، فاستخدم دلو تخزين كائنات لتفريغ أصول Discourse والرفع - يمكنك استخدام Cloudflare R2 المجاني المتوافق مع S3 (لديّ هذا النظام وهو يعمل بشكل جيد). عندها لن يحتاج خادمك إلى قراءة آلاف الملفات الصغيرة من تلك الأقراص SSD الفاشلة لأنه يتجاوز عنق الزجاجة في الأجهزة الخاصة بأصول الويب.

لم أكن أعرف هذا من قبل، وهو بالتأكيد يفسر الموقف. تشير كل أدلة المستخدم الخاصة بالخادم في كل مكان إلى أن تومض مصباح LED برتقالي يعني أن القرص تالف تماماً، ولكن إذا كانت هذه الأقراص تواجه مهلة انتظار في عمليات الإدخال/الإخراج أو تتصرف بشكل غريب، فإن ذلك منطقي تماماً لشرح سبب حصول Discourse على رمز الخطأ 500.

أنا شديد المعارضة للاشتراكات، وعلى المدى الطويل ربما يكون من المنطقي لي أن أتغلب على التردد وأشتري أقراص SSD جديدة عندما تصبح في متناول اليد مرة أخرى. لو أنفقت 150 دولاراً على بعض أقراص SSD الجديدة لهذا الخادم الذي أملكه إلى الأبد، لكان ذلك أفضل بكثير من دفع 5 دولارات شهرياً لـ Cloudflare إلى الأبد. إذا كان الأمر مجانياً (كما تقول)، فقد أبحث فيه كبديل مؤقت بينما أنتظر انفجار فقاعة الذكاء الاصطناعي الحالية :slight_smile: