هل Cloudflare أو الإضافات تتسبب في تعطل مثيل Discourse الخاص بي؟

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

كيف تستخدم Cloudflare تحديدًا؟

إليك موضوع ذو صلة وثيقة:

هل اتبعت الخطوات الثلاث المذكورة هناك؟

نعم، لقد اتبعتها وكان كل شيء يعمل بشكل جيد حتى تحديث النسخة التجريبية الأخير.
ويظل كل شيء يعمل بشكل جيد إلى حد كبير. المشكلة الوحيدة هي الإشعارات، حيث يقوم بإرسال عدد لا نهائي من الطلبات كل بضع ثوانٍ.

وهنا وحدة التحكم الخاصة بي

وهنا الملف المفتوح

قم بتعطيل Cloudflare، فهو يتسبب في تعطل موقعك.

أنا على الخطة المجانية من Cloudflare وأستخدم شهادة SSL الخاصة بـ Cloudflare المدفوعة بـ 5 دولارات، ولا توجد ميزة من ميزات Cloudflare مفعلة، أي أن Rocket Loader معطل وجميع التحسينات الأخرى مثل التصغير (minification) معطلة أيضًا، وميزات أخرى غير متاحة حتى في الخطة المجانية مثل Railgun. كما أن التخزين المؤقت (caching) مضبوط على احترام رؤوس المصدر الأصلية. كان كل شيء يعمل بشكل جيد، لكنني أدركت للتو أنني قمت بالترقية إلى الفرع الرئيسي (master) من git عبر /admin/upgrade، مما قد يكون سبب المشكلة. لقد قمت لاحقًا بإزالة النصوص والروابط المذكورة، لكن النظام لا يزال يتحقق باستمرار من الإشعارات. والمشكلة الوحيدة هي الإشعارات، فكل شيء آخر يعمل بشكل صحيح.

أستخدم Cloudflare لتقديم الملفات المخزنة على Amazon S3 عبر CloudFront. إذا لم أستخدم Cloudflare، سترتفع تكاليفي. Cloudflare يعمل فقط كخادم DNS ومزود لشهادات SSL، ومعظم تحسيناته وميزاته معطلة، والعديد منها غير متاح حتى في الخطة المجانية. هل تعتقد أن Cloudflare لا يزال هو السبب في مشكلتي في هذا السيناريو؟

هل يجب أن أحاول إعادة البناء لحل المشكلة؟

ملاحظة: أنا من معجبي StackOverflow و مدونة CodingHorror ومنصة discourse. تحياتي :vulcan_salute:

جرّب تعطيل CloudFlare (باستثناء DNS الأساسي) كخطوة تجريبية أولاً. إذا اختفى المشكلة، فهذا يخبرك بأمر ما.

لقد قمت بتعطيل السحابة البرتقالية في Cloudflare، وانتظرت حتى يظهر المتصفح شهادة SSL من Let’s Encrypt بدلاً من Cloudflare للتأكد من أن المحتوى يُصل إليه مباشرة من الخادم وليس عبر Cloudflare، ثم قمت بإعادة البناء. الآن، عند النقر على قائمة المستخدم وأيقونة الإشعارات، لا يزال يظهر لي الخطأ التالي:

Uncaught (in promise) DOMException: Quota exceeded.
_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77250 Uncaught TypeError: Cannot read property 'dasherize' of undefined
    at s.itemHtml (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77250)
    at _application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77390
    at _ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:39008
    at t.u.Mixin.create.c.forEach (_ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:38995)
    at t.u.Mixin.create.c.map (_ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:39007)
    at s.html (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77389)
    at s.value (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:80621)
    at s.value (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:80371)
    at s (_vendor-7fd29296ee54f8a7ced9508b106a09ec4aae4912ed1cf10eceb7eb2acca03309.js:20669)
    at t.exports (_vendor-7fd29296ee54f8a7ced9508b106a09ec4aae4912ed1cf10eceb7eb2acca03309.js:20652)

وعند فتح الملف، يظهر التالي:

define("discourse/widgets/quick-access-notifications", ["discourse/lib/ajax", "discourse/widgets/widget", "discourse/widgets/quick-access-panel"], function (_ajax, _widget, _quickAccessPanel) {
  "use strict";

  (0, _widget.createWidgetFrom)(_quickAccessPanel.default, "quick-access-notifications", {
    buildKey: function buildKey() {
      return "quick-access-notifications";
    },
    emptyStatePlaceholderItemKey: "notifications.empty",

    markReadRequest: function markReadRequest() {
      return (0, _ajax.ajax)("/notifications/mark-read", { type: "PUT" });
    },
    newItemsLoaded: function newItemsLoaded() {
      if (!this.currentUser.enforcedSecondFactor) {
        this.currentUser.set("unread_notifications", 0);
      }
    },
    itemHtml: function itemHtml(notification) {
      var notificationName = this.site.notificationLookup[notification.notification_type];

      return this.attach(notificationName.dasherize() + "-notification-item", notification, {}, { fallbackWidgetName: "default-notification-item" });
    },
    findNewItems: function findNewItems() {
      return this._findStaleItemsInStore().refresh();
    },
    showAllHref: function showAllHref() {
      return this.attrs.path + "/notifications";
    },
    hasUnread: function hasUnread() {
      return this.getItems().filterBy("read", false).length > 0;
    },
    _findStaleItemsInStore: function _findStaleItemsInStore() {
      return this.store.findStale("notification", {
        recent: true,
        silent: this.currentUser.enforcedSecondFactor,
        limit: this.estimateItemLimit()
      }, { cacheKey: "recent-notifications" });
    }
  });
});

لاحظت للتو أن هذه المشكلة تحدث فقط عندما أكون مسجلاً دخولاً كمسؤول ويتم عرض mini_profiler أيضًا. لقد قمت بتسجيل الدخول كمستخدم عادي، وتعمل الأمور كما هو متوقع.

انظر إلى:

ربما تحتاج إلى مسح جميع بيانات التخزين المحلي.

لقد قمت بمسح التخزين، ولم يعد يظهر خطأ تجاوز الحصة الآن. ومع ذلك، يستمر النظام في إرسال طلبات متعددة، وأحصل على استجابة 429 تخبرني بالتباطؤ. لم أعد أستخدم Cloudflare الآن (هل يجب عليّ أيضًا حذف قالب Cloudflare من ملف app.yml؟؟). والخطأ نفسه يحدث عند dasherize. أواجه هذه الأخطاء فقط لحساب المدير، وأصبح محظورًا بسرعة بسبب تجاوز حد معدل الطلبات.

ما هي الإضافات والقوالب غير الرسمية التي تقوم بتشغيلها؟ من الممكن أن يكون أحدها يولد حملة طلبات كبيرة.

أنا أستخدم الإضافات التالية

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

ابدأ بتعطيل جميع الإضافات التابعة لجهات خارجية (التي لا تحمل علامة الصح الخضراء). على الأرجح، هذه هي مشكلتك.

لقد قمت بإزالة Cloudflare وإزالة العديد من الإضافات وإضافات الجهات الخارجية، لكن المشكلة لم تُحل بعد.

احذف كل شيء لا يحتوي على علامة صح خضراء وأعد البناء.

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

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

اتضح أنني ما زلت أواجه هذه المشكلة مع بعض المستخدمين.

أعتقد أن مشكلتي مرتبطة بهذه المشكلة المذكورة أدناه، وأواجهها بعد الترقية إلى هذا الإصدار:

لم أستطع تحديد ما يسبب هذه المشكلة. إنها تعمل مع المستخدمين الجدد، لكنها لا تعمل مع الآخرين. كنت أستخدم إضافة “متابعة” (Discourse Follow)، ثم قمت بإلغاء تفعيلها. والآن أواجه هذه المشكلة. هل من الممكن أن تكون المشكلة ناتجة عن إزالة هذه الإضافة؟ أفترض أنها تحدث مع المستخدمين الذين كان لديهم متابعون ربما أو استخدموا تلك الإضافة؟ هذا افتراض جريء حقًا. هل يمكن أن تكون هذه الإضافة مسؤولة عن ذلك؟

نعم، هذا ممكن. نظرًا لأننا لا نملك ذلك الملحق، فلا نعرف ما إذا كان هذا هو الحال. يمكنك محاولة تفعيله مرة أخرى والتحقق. إذا حل المشكلة، فأبلغ عنها في موضوع الملحق.

@Falco نعم، هذا يحل المشكلة. لقد قمت بإعادة إضافة إضافة discourse-follow وقد تم حل المشكلة. شكرًا لك :slight_smile: