في منتدياتنا، كان لدينا موضوع طويل يضم أكثر من 300 منشور مع عميل تطوير ويب تجاري، ولأسباب مجهولة، اختفى ذلك الموضوع بالكامل قبل بضعة أيام بعد نقل بعض المنشورات إلى موضوع آخر.
تحققت من سجل نشاط المستخدم، ولم يسجل السجل أي إدخال يتعلق بحذف أو تعديل ذلك الموضوع “المفقود” الآن. الإجراء الوحيد كان نقل عدد قليل من المنشورات (حوالي 10) إلى موضوع جديد.
اليوم، تفحصت قاعدة بيانات Discourse ووجدت أن جميع المنشورات الـ 306 موجودة، ولكن عند فحص معرف الموضوع (topic_id) في تلك المنشورات الـ 306، كان الموضوع ذو ذلك المعرف فارغًا [].
لنفترض أن سجل الموضوع المفقود كان يحمل معرف موضوع “300000” في سجلات المنشورات.
عندما قمت بتشغيل الأمر التالي في وحدة التحكم، كانت النتائج كالتالي:
> Topic.with_deleted.where(id: 300000)
> []
> Post.where(topic_id:300000).count
> 306
استعدت جميع هذه المنشورات الـ 306 إلى موضوع جديد؛ عن طريق إنشاء موضوع “وهمي” (نموذجي) في واجهة مستخدم Discourse، ثم تغيير معرفات الموضوع (topic_id) لجميع المنشورات “اليتيمة” إلى معرف الموضوع النموذجي الجديد، كما يلي:
لنفترض أن الموضوع الجديد الذي تم إنشاؤه (الموضوع النموذجي) يحمل المعرف: 304000، إذن:
Post.where(topic_id: 300000).update_all(topic_id: 304000)
نجح هذا الإجراء واستعاد جميع المنشورات الـ 306 إلى معرف الموضوع النموذجي/الوهمي الجديد.
ثم قمت ببساطة بتعديل عنوان الموضوع الجديد، فبدت الأمور جيدة؛ وبما أننا لم يكن لدينا أي روابط إلى ذلك الموضوع الطويل والخاص، فلا داعي للقلق بشأن كسر الروابط بسبب معرف موضوع جديد، لذا فإن كل شيء على ما يرام.
ليس لدي أي فكرة عن سبب كون سجل الموضوع فارغًا بينما كانت جميع المنشورات ذات ذلك معرف الموضوع سليمة. لا تُظهر السجلات وسجلات النشاط أي إجراء (حذف، تعديل) على ذلك الموضوع. الإجراء الوحيد على ذلك الموضوع كان نقل حفنة من المنشورات إلى موضوع جديد، لكن ذلك لا ينبغي أن “يُفرغ” سجل الموضوع.
بما أنني لا أستطيع تكرار هذا (ولست متأكدًا مما حدث)، لم أبلغ عن هذا كـ “خطأ”؛ بل انتظرت حتى وجدت وقتًا اليوم وقمت ببعض البحث ووجدت أن المنشورات الـ 306 فقدت موضوعها الأصلي “الوالد”؛ لكن هذه التقنية أعادت إحيائها جميعًا.
لو كنت أرغب في الحفاظ على معرف الموضوع الأصلي، كنت سأحاول استعادة سجل الموضوع الأصلي، لكن هذا يبدو أكثر تعقيدًا؛ لذا قمت ببساطة بتعيين المنشورات الـ 306 “الخالية من الموضوع” إلى موضوع جديد، وكانت النتائج، كما هو متوقع:
> Post.where(topic_id:304000).count
> 307
أتمنى أن يفيد هذا أي شخص قد يواجه موقفًا مشابهًا في المستقبل.