نقل المواضيع من مثيل Discourse إلى آخر

كنت أرغب منذ فترة طويلة جدًا في حل مشكلة هجرة ملفات الرفع (upload migration)، والآن، بمساعدة النماذج اللغوية الكبيرة (LLM)، نجحت في ذلك. أشارك ملاحظاتي لمن يتابع! كان منشور جاي أعلاه يحتوي على العنصر الأساسي الذي ساعدني على البدء، لذا شكرًا له على ذلك.

كانت محاولتي الأولى تعمل تمامًا كما توقع جاي. إذا قمت بإنشاء قائمة من روابط الصور على الموقع الذي تنتقل منه ولصقها في منشور على موقعك الجديد، فسيتم تنزيلها. يجب تمكين خيار تنزيل الصور البعيدة إلى المحلية (Download remote images to local) حتى يعمل هذا.

أنشأت لي النماذج اللغوية سكريبتًا لذلك، وسأشاركه هنا للمسافرين المستقبليين.

الملخص

شغّل هذا في سطر أوامر Rails:

topic = Topic.find(=TOPIC_ID=)
posts = Post.where(topic_id: topic.id)
urls = []

posts.each do |p|
  UploadReference.where(target: p).each do |ref|
    urls << "=SOURCE_URL=#{ref.upload.url}"
  end
end

puts urls.uniq.join("\n")
puts "\nTotal: #{urls.uniq.count} upload(s)"

:bulb: هل تريد نقل فئة كاملة بدلاً من ذلك؟ استبدل السطرين الأولين بما يلي:

topic_ids = Topic.where(category_id: =TOPIC_ID=).pluck(:id)
posts = Post.where(topic_id: topic_ids)

في هذه الحالة، يكون =TOPIC_ID= هو معرّف الفئة (Category ID)، والذي يمكن العثور عليه في نهاية عنوان URL الخاص بها في Admin → Categories.

ومع ذلك، لم يكن ذلك كافيًا بالنسبة لي لأن لدي أيضًا ملفات PDF لا يتم تنزيلها محليًا تلقائيًا.

لذا، جعلت النماذج اللغوية تكتب لي سكريبت بلغة بايثون (Python) لترحيل ملفات الرفع. إنه يعمل بشكل جيد جدًا، لذا يسعدني مشاركته أيضًا. إذا كنت ترغب في تجربته أو لديك ملاحظات، فإليك المستودع: tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

إعجابَين (2)