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

تمكين “تنظيف التحميلات” يبدو مخيفًا مع رسالة التحذير. عند تحويل منتدى موجود إلى 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;

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