اختفاء تكاملات يوتيوب

بعد عناء وجهد ودموع، أعتقد أن المشكلة حُلّت.

ومع ذلك، لستُ فخورًا جدًا “بحل” هذه المشكلة، لكن يا للهول، هذا غوغل؛ لن يتحدثوا أو يشرحوا لك أي شيء، لذا… إليك الاستنتاجات:

  • أولاً وقبل كل شيء، درس مهم: لا تفعّل IPv6 على DigitalOcean إذا كنت تستخدم Discourse، لأن نطاق IPv6 الخاص بهم محظور من قِبل YouTube.

  • بعد إصلاح مشكلة IPv6، ومع زيادة حركة المرور، بغض النظر عن المضيف (تغيّر عدة مرات، ما هي الرحلة!)، ما حدث بعد ذلك هو أن YouTube قام بحظر عنوان IP الخاص بتثبيت Discourse لدي، بسبب العدد الكبير لفيديوهات YouTube المنشورة على الموقع وكيفية تحميل Discourse لها.

  • للتحقق من هذا الحظر، يجب إما استخدام خادمك كوسيط (proxy) لخادم يحتوي على متصفح، أو ببساطة استخدام أمر curl والبحث عن السطر التالي: “نعتذر عن الانقطاع. لقد تلقينا عددًا كبيرًا من الطلبات من شبكتك.” (هناك موضوع للمرجعية)

  • بفضل مساعدة @riking و @neounix و @Overgrow، نفذتُ سلسلة من الأوامر (يمكنك قراءتها أعلاه) لمحاولة إما إيقاف أو تقييد أو تغيير معدل عملية “خبز” تضمين فيديوهات YouTube. بالنسبة لمعظم المواقع، سيكون ذلك كافيًا، لكننا واجهنا drama إضافية ناتجة عن الترحيل بعد تجربتي لعدة مضيفات، لذا كان على جميع المنشورات السابقة أن تُخبز. في الواقع، تقييد العملية إلى مرة واحدة كل ساعة شبه حل المشكلة في البداية. لكني أظن أن مجتمعي يحب مشاركة الفيديوهات حقًا لأن هذا الحل لم يدم طويلًا.

  • من الواضح أنه لا توجد أي تغذية راجعة أو مساعدة من YouTube هنا، باستثناء بضع خيوط على منتداها تحتوي على الخطأ وجميع التعليقات التي تقول “نعم، لدي هذه المشكلة أيضًا” دون وجود حلول.

  • بالنظر إلى الظروف، وتذكر منطق الإعلانات التجارية القائل بـ “يجب أن يكون هناك طريق آخر!”، اخترتُ نهجًا “رامبو”: اشتريت عنوان IP آخر. ثم أضفت مهمة مجدولة (cron) تقوم بتبديل عنوان IP الصادر كل ساعة. المشكلة حُلّت.

من المتوقع أنه إذا استمر الموقع في النمو واستمر الناس في مشاركة حبهم لفيديوهات YouTube، فقد أحتاج إلى شراء عنوان IP ثالث. لكن يا للهول، حتى أجد طريقة صحيحة لتنفيذ “Discourse موزع” في K8S أو شيء مشابه، فهذا أفضل ما يمكن الحصول عليه.

ليست الأنيق من الحلول، كما أعرف.

مرة أخرى، شكرًا لكم على كل المساعدة (وعلى الصبر في الغالب، لأنني أعلم أنني مبتدئ جدًا مع مزيج Rails/Sidekiq/RubyConsole، لكنني أحاول التحسن من خلال قراءة كود Discourse).

شكرًا!