الموضوع يُحذف باستمرار

إليك ما توصلت إليه:

  1. ينشئ المستخدم موضوعًا
  2. يقوم المستخدم بحذف منشور الموضوع، مع جدولة الحذف (لقد قمت بتغيير إعداد الموقع delete_removed_posts_after إلى 1)
  3. يتم حذف الموضوع بعد الوقت المحدد
  4. يقوم الطاقم بإلغاء حذف الموضوع ويعيد النسخة الأصلية من المنشور (فقط عملية الاستعادة вернут المنشور مع الرسالة “الموضوع سحبه المؤلف، سيتم حذفه تلقائيًا خلال ساعة ما لم يتم الإبلاغ عنه”)
  5. سيتم حذف الموضوع مرة أخرى بعد مرور بعض الوقت

ما يحدث: عندما يقوم المستخدم بحذف منشور موضوعه الخاص، يتم تعيين خاصية تسمى user_deleted إلى true. هناك مهمة خلفية تسمى DestroyOldDeletionStubs تعمل كل 30 دقيقة. تقوم هذه المهمة بتشغيل دالة PostDestroyer.destroy_stubs التي ستبحث في قاعدة البيانات وتحذف أي منشورات تم تعيين user_deleted فيها إلى true مع انتهاء مؤقت الحذف.

المشكلة: عندما يستعيد الطاقم المنشور، لا يتم أبدًا تعيين user_deleted إلى false، لذا في المرة القادمة التي تعمل فيها مهمة DestroyOldDeletionStubs، سيتم حذف المنشور مرة أخرى.

الحل: أنا متأكد تقريبًا أننا سنحتاج إلى إضافة بعض المنطق إلى دالة staff_recovered لتعيين user_deleted إلى false (دالة user_recovered تقوم بذلك بالفعل) انظر discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub

الحل السريع: استعد منشور الموضوع واحصل على معرف المنشور، ثم اذهب إلى وحدة تحكم Rails وقم بتشغيل:

Post.find_by_id(POST_ID).update(user_deleted: false)

يمكن العثور على معرف المنشور بسهولة عن طريق إضافة .json في نهاية رابط الموضوع. لذا باستخدام هذا الموضوع كمثال: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. معرف منشور الموضوع هو 632362.

10 إعجابات