أنت لست مخطئًا. أنت فقط تحاول حل مشكلة، ربما لأنك محبط لأن تضمينات يوتيوب (YT) لا تعمل…
عند تشغيل الأمر التالي:
# time rake posts:rebake_match['youtube',string,100]
116 / 76598 (0.2%)-
وبما أن التأخير مضبوط على 100، فسيتم إعادة معالجة منشور واحد فقط كل 100 ثانية. لديك ما يقرب من 77 ألف منشور لإعادة معالجته (باستخدام هذا النمط)، مما يعني أن الأمر سيستغرق حوالي 90 يومًا لإكمال إعادة المعالجة. عندما استخدمت الرقم 100، كان ذلك مجرد مثال وليس توصية، آسف إذا تسببت في إرباكك
حتى لو غيرت التأخير إلى 10 ثوانٍ، فإن عملية إعادة المعالجة ستستغرق حوالي 9 أيام.
ما هو المعدل الذي تريد فعليًا إعادة معالجة “كعكات يوتيوب” (YT cakes) بموجبه؟
ثم ذهبت للتحقق من ذلك المنشور، لكنه لا يزال يعرض الرابط فقط دون ظهور الصندوق المصغر (onebox). (تحققت بدون ذاكرة تخزين مؤقت، وبدون ملفات تعريف ارتباط، وحتى من جهاز كمبيوتر مختلف :P)
إذن، هذه معلومة مهمة؛ والآن نعلم أن إعادة معالجة منشور واحد فقط باستخدام مهمة rake لا تحل مشكلتك (كما تم التأكد من أن إعادة بناء HTML من الواجهة لا تعمل كما اقترح @Overgrow)، وهو ما كنت تحاول إخبارنا به من قبل.
شكرًا لك على خطوات استكشاف الأخطاء وإصلاحها المفصلة.
دعني أفكر في هذا قليلًا؛ وفي الوقت نفسه، قد يكون لدى الآخرين بعض الأفكار الآن مع تزايد وضوح المشكلة.
انشر أحد روابط يوتيوب (التي لم يتم حلها) (ربما حيث أضفت نص ‘icemanworkingonthisheadache’) هنا، ودعنا نتأكد من عمل الصندوق المصغر هنا (وسأجرب أيضًا على أحد مواقع الاختبار الخاصة بي).
نعم، تعمل جميع الصناديق المدمجة الأخرى كما هو متوقع: Discourse و WordPress و SoundCloud و Facebook و Twitter و Vimeo وما إلى ذلك. فقط YouTube يظهر كرابط URL.
أحد الخيارات التي يمكنك تجربتها هو تسجيل الدخول إلى Google وزيارة موقع YouTube أثناء استخدام خادمك كوسيط، ثم التحقق مما إذا كانت تظهر لك أي رسائل خطأ “مثيرة للاهتمام”.
إذًا، بعد أسبوع من التوبة، حققت بعض التقدم لكنني اصطدمت بحائط في النهاية.
جميع التفاصيل المذكورة أعلاه لا تزال سارية.
بعد بذل جهد استثنائي في تصحيح الأخطاء، اتضح أن المشكلة كانت كالتالي: عندما أنشأت الـ Droplet الجديد، استغلت الفرصة لتحديث بعض الأمور لم أستطع فعلها آنذاك مع الـ Droplet الأصلي. أحد هذه الأمور كان IPv6. اتضح أن نطاقات IPv6 الخاصة بـ Digital Ocean محظورة في الغالب من قبل Google لسبب كوني ما. لذا، نصيحة للمستقبل: إذا كنت تقوم بإعداد تثبيت Discourse على Digital Ocean، فلا تقم بتفعيل IPv6، لأنك لا تستطيع إزالة ذلك الـ IPv6 لاحقًا؛ بل سيتعين عليك تغيير الـ Droplet.
بعد تصحيح ذلك، عمل كل شيء كما هو متوقع. ومع ذلك، بسبب النمو الطبيعي (وبعض التكتيكات الأخيرة من Alphabet)، عدت إلى نقطة الصفر لأنني الآن أحصل على هذه الرسالة الخطأ ولا أعرف أي طريقة لـ “إيقاف” Discourse عن معالجة oneboxes (حتى جربت إضافة نطاق YT إلى القائمة السوداء، دون جدوى). والسبب أن المنشور الذي ربطت به يقول إنه “يجب أن يختفي بعد ساعة”، لكنني لا أستطيع تجميد عمليات إعادة المعالجة (rebakes)… أم أستطيع؟ هل يجب أن أفعل؟ الخيارات الأخرى تعتمد على تغيير أشياء على جانب الخادم، لكن هذا يعني… إضافة عناوين IP أكثر؟ فرض استخدام “X-Forwarded-For” في مكالمات Onebox؟
أيضًا، سؤال إضافي: لماذا يتحمل Discourse “عبء” الاتصال بـ YouTube؟ أعني، تشير هذه الرسالة الخطأ إلى أن عنوان IP الخاص بالخادم هو الذي تم تحديده كمنفذ لجميع المكالمات (نعم، هذا بسبب فك الارتباط التلقائي للـ onebox)، لكن… لماذا لا يقع هذا العبء على المستخدم الذي يفتح الصفحة؟ هل لأسباب تتعلق بالأداء؟
كحل مؤقت، جربت هذا (غير أنيق) من CSS (لك) ويبدو أنه يعمل لإيقاف الواحد بوكس (من المعالجة)؛ كنهج من نوع “ضرب ذبابة بمطرقة”، والذي يمكنك تشغيله وإيقافه (إضافة وطرح) حتى تجد شيئًا أفضل. جربه وانظر:
.onebox-body{
display:none;
}
أتمنى أن يكون هذا مفيدًا.
ملاحظة:
لقد جربت هذا على بعض روابط الواحد بوكس واختفت الواحد بوكس(ات) وظل الرابط؛ لكنني لم أجربه بالتفصيل، عذرًا.
توقف ببساطة عن المعالجة الحالية. هل تعرف ما الذي أثار إعادة الخبز (rebake) التي تعمل حاليًا؟ هل هي وظيفة في الخلفية؟ إذا كان الأمر كذلك، فقم فقط بتقليل إعداد ‘عدد مشاركات إعادة الخبز القديمة’ إلى الصفر.
يمكنك بعد ذلك استخدام إعادة الخبز لمشاركات يوتيوب محددة (تطابق تعبيرًا نمطيًا) مع تأخيرات..
تعلمت مؤخرًا (بفضلكم يا رفاق) كيفية إجراء عمليات إعادة خبز مخصصة وتنفيذ بعض الاستعلامات والسحر الأسود. ومع ذلك، هل يمكنني أن أسأل كيف يمكنني معرفة/استعلام هذا:
أعني… هل هذا في وحدة تحكم Ruby أم عن طريق إيقاف شيء ما في Sidekiq…؟
لكن لا يمكنني تعيينه على الصفر. واجهة المستخدم تقول إن القيمة يجب أن تكون بين 1 و 2000000000. لذا أعتقد أنني سأعيّنه على 1 وأدمجه مع خدعتك… هذا يجب أن يسمح لي برؤية ما إذا كان الحظر يُرفع.
(لأن الخيارات الأخرى أثقل بكثير، مثل عناوين IP الجديدة، أو موازنات التحميل، أو فرض X-Forwarded-For مباشرة على كل شيء، ولا أريد أن أفسد طريقة عمل Discourse )
للعلم… إذا كنت بحاجة إلى تعيينه إلى صفر، فمن المرجح جدًا أن تتمكن من ذلك عبر استعلام تحديث مباشر لقاعدة البيانات (أو Rails، الذي لا أستطيع التحدث عنه بذكاء)
حسناً، لم ينجح الأمر. تركت القيمة على 1 واستخدمت حيلة لإخفاء أي شيء، لكن الحظر لا يزال ساريًا بعد 5 ساعات. أسوأ جزء؟ من الواضح أنه لا توجد طريقة للتواصل معهم، لذا أنا فقط أحاول التخمين في سبل الحل.
تحتاج إلى الصبر. قد يستغرق الأمر من يومين إلى ثلاثة أيام قبل رفع الحظر، حسب تجربتي. فقط تأكد من عدم وجود طلبات إضافية إلى عنوان IP هذا.
يمكنك التحقق مما إذا كانت هناك مهام إعادة طهي (rebake jobs) لا تزال قيد التنفيذ. التلميح موجود في الكود (هذا السطر يختار المنشورات التي تحتاج إلى إعادة طهي في الخلفية، محددًا بإعداد rebake old posts count):
أنت تبحث عن المنشورات التالية:
WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))