تعليقات Discourse عالقة على "جار التحميل..."

مرحباً،

خلال الأيام القليلة الماضية، لاحظنا في منصة Discourse الخاصة بنا أن زر “عرض المنشور بالكامل” لا يزال يعرض “جارٍ التحميل…” عند النقر عليه:

بالإضافة إلى ذلك، توقفت التعليقات الجديدة في Discourse عن الظهور من خلال تضميننا داخل موقع Drupal الخاص بنا. لقد استخدمنا بنجاح تعليمات تضمين JavaScript من الأسفل لسنوات:

ومع ذلك، لسبب ما، يبدو أن هذا قد توقف عن العمل مؤخرًا. أعتقد أن آخر منشور تم عرضه بنجاح كان حوالي الأول من هذا الشهر. المنشورات القديمة تظهر في Discourse وفي وحدة التضمين، ولكن في المقالات الأحدث، تظل كتلة Discourse عالقة على نص “جارٍ التحميل…”.

تقوم وحدة Discourse Drupal الخاصة بنا بالتحميل من الكود التالي:

<div id="discourse-comments">
 <script type="text/javascript">
            var discourseUrl = "https://discourse.sitename.com/",
            discourseEmbedUrl = "http://sitename.com/node/' . $nid . '";

            (function() {
              var d = document.createElement("script"); d.type = "text/javascript"; d.async = true;
              d.src = discourseUrl + "javascripts/embed.js";
              (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(d);
            })();
          </script>
 </div>

لقد تأكدت من أن ملف “javascripts/embed.js” لا يزال موجودًا في نفس المسار.
هذه هي الكتلة التي تظهر في صفحات المقالات؛ تعرض فقط “جارٍ تحميل المناقشة…” مؤخرًا على الرغم من ذلك:
image

لم نجرِ أي تغييرات خلال السنوات القليلة الماضية على تضمين Discourse أو إعداده. هل كانت هناك أي تغييرات حديثة في وظائف Discourse قد تسببت في تعطل هذا؟ أي مساعدة في إصلاح هذا ستكون محل تقدير كبير!

إعجابَين (2)

نحن نستخدم نفس وظيفة التضمين في موقعنا. أفترض أن discourseUrl و discouseEmbedUrl ليسا ما نشرته أعلاه وبدلاً من ذلك هما عناوين URL ذات الصلة لمنتدى الخاص بك؟

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

هل تحققت من وحدة التحكم بحثًا عن أخطاء؟

يمكنك دائمًا محاولة تعطيل إعداد embed_truncate فقط لمعرفة ما إذا كان ينشر النص بالكامل. قد يساعد ذلك في تضييق سبب المشكلة.

هل قمت بترقية أو تغيير أي سمات مؤخرًا؟ أم أنك تقصد حقًا أنك لم تقم بالترقية منذ سنوات؟

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

نعم، هذا صحيح، لقد استخدمت عنصرًا نائبًا لاسم الموقع لمجرد الوضوح.
تباً، حسناً، إنه لمن دواعي الارتياح أن يبدو أن وظيفة تضمين Discourse ليست معطلة! يجب أن يكون هناك شيء من جانبنا.

لقد تحققت من سجلات Discourse (discourse.sitename.com/logs) ورأيت الكثير من إشعارات الإهمال مثل أدناه:

إشعار إهمال: تم إهمال SiteSetting.enable_personal_messages.

يمكنني بالتأكيد محاولة تعطيل embed_truncate أيضاً، سأبحث عن ذلك تالياً. ولكن هذه الوظيفة كانت تعمل لسنوات دون مشاكل، لذلك لست متأكداً لماذا قد تتعطل…

إعجابَين (2)

حاول النظر إلى وحدة تحكم أدوات المطور بحثًا عن أخطاء عند النقر فوق الزر “إظهار المنشور بالكامل”. يمكن الوصول إلى أدوات المطور عن طريق النقر بزر الماوس الأيمن و “الفحص”. ستظهر الأخطاء باللون الأحمر على الجانب الأيمن.

نعم، ميزة التضمين بالتأكيد ليست معطلة. إنها تحدث عدة مرات في اليوم لموقعي.

أحدث إصدار تجريبي هو Discourse 3.1.0.beta4، الإصدار المستقر هو 3.0.3: Security and bug fix release

إعجابَين (2)

أعتقد أن إعدادنا مُدار؛ لم أقم بأي تغييرات عليه، ولكن لوحة تحكم Discourse الخاصة بنا تُظهر تاريخ آخر تحديث لـ Discourse بتاريخ 18 أبريل. بالنظر إلى آخر إعلان مرتبط بذلك، يبدو أنه 3.0.3.

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

تأكد من أنك تقوم أيضًا بتشغيل أحدث إصدار من Discourse. قد يكون من المفيد أيضًا معرفة ما إذا كان نفس الشيء يحدث في الوضع الآمن.

هذا اقتراح جيد، شكرًا لك! لقد تحققت للتو ورأيت هذا الخطأ:

Uncaught DOMException: An invalid or illegal string was specified
postUp embed-application.js:6
onload embed-application.js:36
EventHandlerNonNull* embed-application.js:25
<anonymous> embed-application.js:66
[embed-application-4e18c443be26cb7c50c56d1a8f39fcf176af9b4ae8e42243648f33c23d9b7eb9.js:5](https://conversation.spectrummagazine.org/assets/embed-application-4e18c443be26cb7c50c56d1a8f39fcf176af9b4ae8e42243648f33c23d9b7eb9.js)
postUp embed-application.js:6
onload embed-application.js:36
(Async: EventHandlerNonNull)
<anonymous> embed-application.js:25
<anonymous> embed-application.js:66

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

لقد رأيت خطأ CSP في وحدة تحكم أدوات المطور في المرة الأخيرة التي تحققت فيها من هذا الأمر، لذا ربما يمكن أن يكون هذا هو السبب، ربما من جانب Cloudflare.

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

أشك في أن شيئًا ما يتعلق بهذا.

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

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

يا لها من فكرة جيدة! هل تعرف أي إعداد أمان كان يجب تعديله لإصلاح هذا؟
لقد أجريت بعض التغييرات، لذا لست متأكدًا من أي منها يجب أن أتراجع عنه تحديدًا.

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

يبدو أن شيئًا ما ليس سعيدًا جدًا بنقر هذا الزر.

تمكنت من تحديد المشكلة! لقد تواصلت مع الدعم المُدار لـ Discourse وقدموا لي عنوان IP كنا قد أضفناه سابقًا إلى قائمة الحظر على جدار حماية التطبيقات (WAF) الخاص بنا، بسبب كمية كبيرة من حركة المرور من هذا العنوان. اتضح أن عنوان IP هذا كان مطلوبًا السماح به لكي يتواصل Discourse بشكل صحيح. أنا سعيد جدًا لأنه لم تكن هناك مشكلة من جانب Discourse!

5 إعجابات

نعم، يبدو الأمر مشابهًا للمشكلة التي واجهتها. سعيد لأنك تمكنت من حلها :slight_smile:

إعجابَين (2)

أعتقد أنني قد أواجه نفس المشكلة. لدي أخطاء DOMException هذه في وحدة تحكم مطوري المتصفح الخاصة بي. أنا لا أستخدم Cloudflare، مع ذلك. مدونتي التي تتضمن إطار Discourse المستضاف على Netlify، و Discourse نفسه بواسطة Communiteq.

اعتقدت في البداية أن هذا التغيير كان يسبب المشكلة:

لكنني الآن أعتقد أنه قد يكون شيئًا آخر؟ أي مساعدة ستكون موضع تقدير.

هل لديك وصول إلى إعدادات الأمان و/أو الشبكة من خادمك على Netlify؟ من تجربتي الأخيرة، إذا كنت مكانك، سأتحقق من إعدادات الأمان الخاصة بك لمعرفة ما إذا كان قد تم حظر أي عناوين IP. سأتحقق مرة أخرى مع دعم Communiteq أيضًا، لأنهم قد يتمكنون من تأكيد عنوان IP (عناوين IP) المطلوب حتى يتمكن خادم Netlify الخاص بك من الاتصال بـ Communiteq لتنفيذ البرامج النصية بنجاح اللازمة لعرض موارد Discourse.

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

أهلاً! شكراً لمحاولتك المساعدة!

لقد تواصلت مع Communiteq.

لست متأكداً مما يمكنني فعله من جانب Netlify ولكني سأبحث في الأمر. أشك في أن المشكلة هناك على أي حال، لأنه من الناحية الفنية، تأتي الطلبات من متصفحات زوار موقعي، أليس كذلك؟ إذا فهمت بشكل صحيح كيف يعمل هذا، ويرجى إرشادي إذا لم أفعل، فهذا هو JavaScript من جانب العميل الذي يتم تنفيذه في متصفح زائر الموقع. يرى Discourse اسم المضيف للخادم في الطلب، ولكنه لا يرى عنوان IP. خادم المدونة الخاص بي لا يتواصل مع خادم المنتدى. إنها مجرد تثبيت مدونة ثابتة على أي حال. إنها مجرد HTML مع JavaScript من جانب العميل. يستخدم برنامجاً نصياً لإرسال بيانات منشور المدونة إلى Discourse وتحميل الأشياء من المنتدى في إطار iframe.

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

كانت المشكلة بالفعل خطأ في أحدث إصدار من Discourse. تقوم Communiteq بإصلاحه على نسخة المنتدى الخاصة بي. لمزيد من المعلومات، انظر هنا:

يرجى ملاحظة أن هذه المشكلة مختلفة.

كانت المشكلة في هذا الموضوع تتعلق بعدم قدرة Discourse على “إظهار المنشور بالكامل” في Discourse لأن الموقع المضمن رفض تقديم محتويات منشور المدونة إلى Discourse.

المشكلة في موضوع @fabsh هي نتيجة لتصحيح أمني (أحدث) في Discourse يحتوي على مشكلة.

3 إعجابات

مرحباً، أقوم بنشر تحديث لهذا، حيث تغيرت بعض الأشياء في تحقيقي في هذه المشكلة. تستمر المشكلة منذ التحديث إلى 3.0.4؛ جميع المقالات التي تم إنشاؤها حديثًا تواجه مشكلات في عرض كود Discourse المضمن. جميع المقالات التي تم إنشاؤها قبل هذا التحديث لا تواجه مشكلة، لذا فهي ليست مشكلة حظر عنوان IP هي السبب.

يبدو أن Discourse في أحدث إصدار قد غير منطق كيفية إنشاء المشاركات تلقائيًا بواسطة كود التضمين، لذا يتطلب الكود الجديد الآن عنوان URL الأساسي. انظر الموضوع المرتبط سابقًا:

ومع ذلك، هذا يكسر وظيفة التضمين بالكامل في مواقع مثل موقعي. كنت أستخدم سابقًا معرف العقدة (Node ID) في Drupal للتضمين، كما هو موضح في الكود أدناه:

discourseEmbedUrl = "http://sitename.com/node/' . $nid . '";

يتطلب كود Discourse الجديد هذا استخدام عنوان URL الأساسي بدلاً من ذلك، مما يؤدي إلى إنشاء مواضيع مكررة إذا قام شخص ما ببساطة بإعادة تسمية عنوان المقالة. هذا هو السبب في أنني كنت أستخدم معرف العقدة، لأنه لا يتغير.

هل من الممكن جعل عنوان URL الأساسي الجديد هذا اختياريًا؟ حاولت تغيير كود التضمين الخاص بي لاستخدامه، لكن مشكلة التحميل عادت لجميع المشاركات التي تم إنشاؤها باستخدام كود التضمين القديم.

لذا في الوقت الحالي، مع تشغيل كود Discourse الجديد على موقع الإنتاج الخاص بي، أنا عالق بين هذين الخيارين:

  • المقالات التي تم إنشاؤها حديثًا على Drupal تعرض “جارٍ التحميل…” ولكنها لا تقوم بتحميل كتلة تضمين التعليقات أبدًا؛ المقالات القديمة التي تم إنشاؤها قبل Discourse 3.0.4 يتم تحميلها بشكل جيد.

أو،

  • المقالات التي تم إنشاؤها حديثًا على Drupal تقوم بتحميل كتلة تضمين التعليقات بشكل جيد، ولكن جميع المقالات القديمة التي تم إنشاؤها قبل Discourse 3.0.4 تعرض “جارٍ التحميل…” ولكنها لا تقوم بتحميل كتلة تضمين التعليقات أبدًا.

هل هناك طريقة لجعل هذه الميزة الجديدة اختيارية؟ الاضطرار إلى الاختيار بين أي من هذين الخيارين يضعني في موقف صعب.

إعجابَين (2)