تنظيف عمليات التحميل وحذف التحميلات من S3

:bookmark: هذا دليل مرجعي يصف كيفية إزالة التحميلات اليتيمة والمحذوفة تلقائيًا من موقع Discourse. ينطبق هذا الدليل على مواقع Discourse المستضافة ذاتيًا والمستضافة.

:person_raising_hand: مستوى المستخدم المطلوب: مسؤول

هل تساءلت يومًا عما يحدث للملفات والصور التي تم تحميلها إلى موقع Discourse ولكن لم يعد تتم الإشارة إليها، أو كيف تزيل التحميلات من موقع؟ أنت في المكان الصحيح!

قد تحتاج إلى حذف الملفات والصور التي تم تحميلها إلى Discourse والتي لم يعد تتم الإشارة إليها. لا توجد طريقة مدمجة للقيام بذلك من واجهة المستخدم، ومع ذلك، يحتوي Discourse على مهمة Sidekiq تلقائية مجدولة لإزالة التحميلات اليتيمة والمحذوفة تسمى تنظيف التحميلات.

التحميلات اليتيمة والمحذوفة

:information_source: التحميلات اليتيمة هي ملفات تم تحميلها إلى موقع Discourse ولكن لم يعد تتم الإشارة إليها. يعتبر التحميل يتيمًا فقط وفقط إذا لم تتم الإشارة إليه:

  • في أحدث إصدار من منشور
  • في مسودة
  • في منشور في قائمة الانتظار
  • في إعداد موقع الشعار
  • في رمز تعبيري مخصص
  • في سمة
  • في صورة رمز المستخدم/الخلفية/البطاقة
  • في شعار الفئة/صورة الخلفية

:information_source: تعتبر التحميلات “محذوفة” عند حذف الموضوع/المنشور الذي تحتوي عليه.

تنظيف التحميلات

لإزالة تحميل بالكامل من Discourse، سيتعين عليك القيام بأحد الإجراءات التالية:

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

سيتم بعد ذلك إزالة جميع التحميلات اليتيمة غير المشار إليها والتحميلات المحذوفة من التخزين (بعد فترة سماح) بمجرد تشغيل مهمة تنظيف التحميلات.

إعدادات الموقع

الإعدادات التالية للموقع متاحة في example.discourse.com/admin/site_settings/category/files لتعديل كيفية قيام Discourse بإزالة التحميلات تلقائيًا.

  • تنظيف التحميلات: افتراضي صحيح
  • ساعات فترة السماح للتحميلات اليتيمة النظيفة: افتراضي 48
  • أيام فترة السماح للتحميلات المحذوفة للتنقية: افتراضي 30

يمكن استخدام إعداد تنظيف التحميلات لتمكين أو تعطيل الحذف التلقائي للتحميلات اليتيمة غير المشار إليها. ساعات فترة السماح للتحميلات اليتيمة النظيفة و أيام فترة السماح للتحميلات المحذوفة للتنقية هما الإعدادان اللذان يتحكمان في المدة التي بعد اكتشاف تحميل يتيم أو محذوف يتم تنقيته وإزالته نهائيًا من الموقع.

التفاصيل الإضافية حول مهمة تنظيف التحميلات متاحة في ملف clean_up_uploads.rb على GitHub.

تنقية تحميلات S3

:warning: القسم التالي ينطبق فقط على مواقع Discourse المستضافة ذاتيًا.

:information_source: إذا كنت مستضافًا حاليًا على خطة Enterprise، فيرجى التواصل مع team@discourse.org إذا كانت لديك أي أسئلة حول حذف التحميلات من تخزين S3 الخاص بك.

يعمل تنظيف التحميلات اليتيمة والمحذوفة بشكل مشابه لكل من التخزين المحلي وتخزين S3. الفرق الوحيد بين التخزين المحلي وتخزين S3 هو أن تنظيف تحميلات S3 تتم معالجته تلقائيًا بواسطة S3 عبر سياسة tombstone. راجع إدارة دورة حياة التخزين الخاصة بك للحصول على تفاصيل إضافية حول كيفية التعامل مع هذا الأمر على S3.

بشكل افتراضي، تتضمن مهمة تنظيف التحميلات تحميلات S3. ومع ذلك، إذا كنت ترغب في تعطيل هذه الميزة، يمكنك إلغاء تحديد إعداد الموقع s3 configure tombstone policy.

4 إعجابات

هل هذا صحيح؟ أعتقد أنك بحاجة إلى إزالة الصورة من المنشور قبل حذف المنشور لجعله يتيمًا.

أيضًا، هل يجب أن يكون هذا الأخير purge deleted uploads grace period days؟

إعجاب واحد (1)

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

باستخدام الاستعلام التالي، يمكنك التحقق مما إذا كانت التحميلات مشار إليها بشكل صحيح بواسطة المشاركات:

select p.post_id, u.id as upload_id
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
where not exists(select * from upload_references r where r.upload_id = u.id)

لا ينبغي أن يُرجع هذا أي صفوف إذا كان كل شيء صحيحًا. إذا استخدمت هذا الاستعلام في ملحق مستكشف البيانات، فسيقوم أيضًا بربط المشاركات التي تحتوي على مرفقات غير مشار إليها بشكل منظم.

إذا أعاد الاستعلام أعلاه نتائج، يمكنك إصلاح مراجع التحميل المفقودة باستخدام الاستعلام التالي:

insert into upload_references(upload_id, target_type, target_id, created_at, updated_at)
select u.id, 'Post', p.post_id, u.created_at, u.updated_at
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
on conflict do nothing;

ستحتاج إلى وصول مباشر إلى قاعدة البيانات لإجراء التغيير التصحيحي.