خطأ: حدث خطأ ما - "خطأ أثناء معالجة المسار: discovery.categories"

يواجه مستخدم إداري واحد خطأً غريبًا بعد تحديث Discourse. يحدث الخطأ عند النقر على زر الرجوع أو شعار الموقع. يبدو أن هذا يُفعّل JavaScript للذهاب إلى جذر/الرئيسية للموقع، ولكن بدلاً من ذلك تظهر الأخطاء التالية:

يظهر الخطأ بصريًا على النحو التالي:

في وحدة تحكم JS:
console

كما اكتشفت أن هذا يحدث مع أي نقرة في شريط التنقل، مثل محاولة الانتقال إلى /admin أيضًا.

هل لديك أي أفكار حول كيفية تتبع هذا الأمر بشكل أعمق؟ لا أرى أي خطأ في production.log أو غير ذلك، لذا كان هذا محيرًا للغاية نظرًا لأنه يبدو مرتبطًا بـ JavaScript.

هل جربت كيفية استخدام وضع الأمان في Discourse؟

شكرًا لك على الاقتراح. الغريب أن الخطأ لا يزال موجودًا حتى بعد تفعيل جميع الخيارات الثلاثة في الوضع الآمن:

ما زلت أعاني من طرق مسدودة في عملية التصحيح حتى الآن. أشك في أن “الوضع الآمن” لا يعطل الجافا سكريبت بشكل كامل بسبب هذا… هل هناك خطوة أخرى يمكنها استبعاد الجافا سكريبت تمامًا من الوظائف لأغراض الاختبار؟

هل موقعك متاح للعامة؟ إذا كان الأمر كذلك، هل يمكنك مشاركة رابط؟ (يمكن إرساله عبر رسالة خاصة إذا كنت تفضل عدم نشره علنًا)

شكرًا على الرابط @mreach. لا أرى أي مشاكل واضحة من هنا.

لقد ذكرت أن هذا يؤثر فقط على مستخدم واحد في الموقع. هل تعلم إذا كانت المشكلة تقتصر على متصفح/جهاز واحد؟ أم أنها تحدث لهذا المستخدم حتى عندما يسجل الدخول باستخدام جهاز مختلف؟

إذا كانت المشكلة في متصفح/جهاز واحد فقط، فقد يشير ذلك إلى أن إضافة متصفح (مثل مانع الإعلانات) تتدخل في كود Discourse.

إذا كانت تؤثر عليه في جميع المتصفحات، فإن الأمر يصبح أكثر تعقيدًا. هل قمت بتثبيت أي إضافات طرف ثالث على المنتدى الخاص بك؟ كما سيكون من المثير للاهتمام معرفة ما الذي قُوم به المستخدم لتعيينه كـ ‘الصفحة الرئيسية الافتراضية’ (الموجودة في تفضيلات ‘الواجهة’ الخاصة به في Discourse)

شكرًا لك - نعم، لديّ نفس الأفكار تقريبًا. لقد طلبت منهم تعطيل جميع الإضافات ومسح جميع بيانات المتصفح. لقد أبلغني مستخدم آخر عن نفس المشكلة للتو… وكلاهما يستخدم Chrome. طلبت منهم تجربة Firefox وBrave، وقال كل منهما إن الأمر نجح معهم هناك، لكن لا شيء مما فعلوه يبدو أنه يجعل Chrome يعمل بشكل

إعجاب واحد (1)

حسناً، الأمر مثير للاهتمام لكنه غير حاسم:

المستخدم الذي يواجه المشكلة لديه “التصنيفات” مُعيّناً كصفحة رئيسية له:
image

إذا غيّر الإعداد إلى تصنيف آخر، مثل “الأحدث” بدلاً من ذلك، فسيتمكن من تحميل الصفحة الرئيسية عن طريق النقر على شعار الموقع واستخدام زر “الرجوع” في المتصفح. أما إذا عاد ليُعيّن “التصنيفات” بدلاً من “الأحدث”، فإن المشكلة/الخطأ تعود من جديد. :weary_face:

هذا المستخدم هو أيضاً مدير، وعندما ينقر على أيقونة القائمة (الهامبرغر) في الزاوية العلوية اليمنى ثم يختار “المدير”، تظهر له نفس الخطأ المذكور أعلاه - حتى لو كانت الصفحة الرئيسية مُعيّنة على “الأحدث” بدلاً من “التصنيفات”.

طبعاً هذه معلومة جديدة، لكنها ليست مفيدة تماماً من منظوري. هُم.

إعجاب واحد (1)

هل هناك إمكانية للحصول على تفاصيل أكثر حول هذه الأخطاء؟ يجب أن تكون جميعها قابلة للتوسيع، ومن المأمول أن تتضمن تفاصيل أكثر قليلاً حول الخطأ.

حصلوا على مخرجات وحدة التحكم التالية: https://pastebin.com/LuDHesyQ

شكرًا مرة أخرى على الاقتراحات حتى الآن - هل لديك أي ملاحظات من ذلك @david؟

إعجاب واحد (1)

أخشى أن لا، هذه السجلات عامة إلى حد ما ولا تبدو وكأنها تقول الكثير حول السبب الفعلي.

أكثر سجل مثير للاهتمام هو ذلك الموجود في أعلى لقطة الشاشة التي شاركتها أعلاه، وهو أيضًا آخر إدخال في pastebin

domainname.com/:1 Uncaught (in promise) {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

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

بشكل منفصل، هل ترى أي أخطاء على جانب الخادم (في /logs)؟ وهل تعمل بأحدث إصدار من Discourse؟

نعم، يتم تشغيل أحدث إصدار. لقد قمت بفحص السجلات أثناء حدوث الخطأ ولم أجد أي شيء في بيئة الإنتاج أو غيرها…

همم، لقد قاموا بنسخ الكائن في ذلك السطر وحصلوا على ما يلي:

{
    "readyState": 4,
    "responseText": "<!doctype html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"refresh\" content=\"30\">\n        <title>domainname.com صيانة</title>\n        <style>\n\t    html {\n\t        background: #3d4147;\n\t    }\n            .center {\n                display: flex;\n                justify-content: center;\n            }\n            .container {\n                background: #717984;\n                max-width: 500px;\n                padding: 5px 50px 30px 50px;\n                margin-top: 20px;\n            }\n            .title {\n                padding-top: 20px;\n            }\n            h1, p {\n                font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n            }\n            @keyframes spin {\n                from { transform: rotate(0deg); }\n                to { transform: rotate(360deg); }\n            }\n            .spinner {\n                animation: spin 10s infinite linear;\n                height: 75px;\n                width: 75px;\n                border: 7px solid #555555;\n                border-right-color: transparent;\n                border-radius: 50%;\n                margin-top: 20px;\n            }\n        </style>\n    </head>\n    <body>\n                <div class=\"center\">\n                    <img src=\"/err/site.png\" alt=\"site logo image\" width=\"512\" height=\"171\">\n                </div>\n        <div class=\"center\">\n            <div class=\"container\">\n\t\t<center>\n                  <h1 class=\"title\" >نحن تحت الصيانة مؤقتًا&hellip;</h1>\n\t\t</center>\n\n                <div class=\"center\">\n                    <img src=\"/err/error.png\" alt=\"maintenance image\" width=\"150\" height=\"152\">\n                </div>\n\n\t\t<center>\n                  <p>domainname.com تخضع حاليًا للصيانة. نحن إما نقوم بترقية الموقع أو إجراء صيانة مجدولة. </p>\n\t\t  <p>لراحتك، قمنا بضبط هذه الصفحة للتحديث تلقائيًا عندما يكون النظام متاحًا مرة أخرى!</p>\n                  <p>شكرًا جزيلاً لصبركم.</p>\n\t\t</center>\n\t\t\n                <div class=\"center\">\n                    <div class=\"spinner\"></div>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>\n",
    "status": 200,
    "statusText": "parsererror"
}

وصورة شاشة للخطأ من وحدة التحكم:

@david هل هذا ما كنت تقصده؟ آمل أن نكون قد سجلنا النتائج الصحيحة.

هل تشغّل Discourse خلف وكيل (proxy)؟ أنا متأكد تقريبًا أن رسالة الصيانة هذه لا تأتي من Discourse نفسه :thinking:

هذه صفحة خطأ يتم عرضها عندما يكون الموقع قيد الصيانة (مثل الترقية أو تحديث Docker)…

أظن أن موقعك لم يكن يخضع لصيانة متعمدة في وقت حدوث الخطأ؟ في هذه الحالة، يجب أن يكون هناك خطأ ما في تنفيذ أو إعداد الوكيل الوسيط. لاستبعاد ذلك، هل يمكنك تعريض discourse مباشرة على المنفذ 80/443؟ (وفقًا لتعليمات التثبيت القياسية لدينا هنا)

بالطبع، من الممكن أن يكون خطأ في discourse هو سبب عرض الوكيل الوسيط لهذه الرسالة. ولكن من الصعب تشخيص ذلك دون معرفة ما كان discourse يعيده. ربما يحتفظ وكيلك الوسيط بسجلات لاستجابات discourse الأصلية؟