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

تريد نقل بعض البيانات من نسخة من Discourse إلى أخرى؟

يوجد أداة سطر أوامر لتصدير موضوع، أو مجموعة من المواضيع، أو فئة كاملة، وأداة أخرى لاستيرادها في الجهة الأخرى.

تصدير/استيراد المواضيع

  • موضوع واحد أو أكثر وردوده
  • المستخدمين الذين شاركوا في الموضوع

تصدير/استيراد الفئات

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

ابدأ: تحديد المعرفات

أولاً، حدد المعرف(ات) لـ =التصدير= الذي ترغب في تصديره. ستجده في نهاية عنوان URL المستخدم للوصول إليه.

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
    (في هذه الحالة أنت في منتصف موضوع - خذ الرقم الأول)

  • https://meta.discourse.org/c/howto/faq/4

معرفات الفئة أو الموضوع

مواضيع متعددة

يمكنك اختيار أكثر من موضوع بإضافة المعرفات مفصولة بمسافة؛ وهذا يعمل في الحقل أعلاه (لا أعتقد أن هذا يعمل للفئات رغم ذلك):

  • 53797 200943 124096

تشغيل سكريبت التصدير

يمكن تشغيل الأداة بصلاحيات المستخدم الجذر (root) داخل الحاوية:

cd /var/discourse
./launcher enter app

قم بتشغيل هذا الأمر:

discourse export_=Export= =ID=

يجب أن يبدو المخرج شيئاً مثل هذا:

بدء تصدير =التصدير=…

من أين يأتي جميع المستخدمين الجدد؟
تم حفظ التصدير في =التصدير=-export-2021-08-27-015437.json

تم الانتهاء

نقل ملف التصدير

يحتاج ملف .json المُصدَّر إلى نقله من داخل حاوية التطبيق حيث قمت بالتصدير إلى داخل حاوية النسخة المستقبلة. يتطلب هذا بضع خطوات.

نسخه إلى “الخارج”

اخرج من الحاوية إذا لم تكن قد فعلت ذلك بالفعل

exit

يجب أن يكون لديك الآن موجه مثل هذا:

root@yourserver:/var/discourse

استخدم docker لنسخ الملف خارج الحاوية (لا أعتقد أنه يمكن نقله)

docker cp app:/var/www/discourse/=FileName= .

نقله إلى النسخة الأخرى

هذا يتجاوز نطاق هذا الدليل، لكن هذا قد يساعدك في الوصول إلى هناك:

نسخه إلى الحاوية في النسخة المستقبلة

قم بالاتصال عبر SSH بنسختك المستقبلة بصلاحيات الجذر وانتقل إلى دليل Discourse:

cd /var/discourse

استخدم docker مرة أخرى لنسخ الملف إلى الحاوية الأخرى

docker cp =FileName= app:/var/www/discourse

استيراد المحتوى

ادخل إلى الحاوية في النسخة المستقبلة:

./launcher enter app

قم بتشغيل سكريبت الاستيراد

discourse import_=Export= =FileName=

:cake: تم!

قد تحتاج إلى ترتيب بعض الأمور الباقية، لكن من المفترض أن يكون كل شيء قد انتهى.

نصائح متقدمة

مكتبة Ruby المفقودة

عند القيام باستيراد فئة معقدة، كانت نسختي تفتقر إلى مكتبة ‘Listen’ الخاصة بـ Ruby.
تم حل هذه المشكلة بالقيام بما يلي: (باستخدام مستخدم Discourse داخل الحاوية)

./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit

هذا أعطل وحدة تحكم rails، مما استلزم إعادة البناء بعدها

./launcher rebuild app

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

في بيئة متعددة المواقع، استخدم متغير البيئة RAILS_DB.

RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=

يرجى الإبلاغ عن الأخطاء في فئة #contribute:bug، وطلب التحسينات في فئة Contribute > Feature.


مواضيع ذات صلة


آخر مراجعة من قبل @SaraDev في 2022-07-13T00:00:00Z

45 إعجابًا
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
How to export user data from a category on a hosted site
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Help migrating category from one instance to another without admin on the source instance
I wonder how to add hundreds of users into a group? Is there any api?
How to download Comments and Topics
Adding default sets of topics, categories and users to a new Discourse
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Transfering inbox group messages to another instance?
Transfering inbox group messages to another instance?
Imported categories are not in parent category
Copy categories / topics
Downloading Content
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts
Migrate user custom fields to another instance
Error Importing Categories from a Discourse Instance to Another

سأحاول مرة أخرى.\n\nهل هناك طريقة سهلة لترحيل الملفات المرفوعة ذات الصلة مع المواضيع؟

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

ليس حقًا. الشيء الذي يعمل في الغالب هو إذا حصلت على كل هذه التحميلات ولصقت عنوان URL الأصلي في أي منشور في الموقع الذي تنتقل إليه، فعندئذ ما يجب أن يحدث هو أن هذه التحميلات سيتم إنشاؤها بنفس SHA وستعمل ببساطة.

لذلك ستقوم بالشيء الذي يحول الأشياء في المنشور إلى عنوان URL للحصول على عناوين URL هذه. (لا يمكنني أبدًا تذكر كيفية القيام بذلك، لذا يجب عليّ معرفة ذلك في كل مرة).

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

هممم - ما زلت مرتبكًا بعض الشيء بسبب ذلك. هل تقصد أن هذا سيعمل؟

  1. احصل على جميع ملفات التحميل من الموقع الأول
    • كيف؟
  2. قم بإسقاطها في موضوع واحد
  3. سيتم إنشاء نفس الرابط النسبي الذي كان لديهم في الموقع القديم وسحر!

أم كنت تقصد هذا؟

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

أم شيء آخر تمامًا؟

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

أعتقد أن أيًا من هذين الخيارين يجب أن يعمل. ومع ذلك، يمكنك نقل هذه الصور إلى الموقع الجديد، ويجب أن تُنشئ نفس الـ sha، مما سيجعل الروابط الموجودة في المواضيع تعمل تلقائيًا.

ربما يمكنك فعل شيء مثل:

cat_id=123
Topic.where(category_id: cat_id).each do| t|
  Post.where(topic_id: t.id) do |p|
      p.cooked.match(image url)....
         puts(the match)

وأعتقد أنه إذا قمت بذلك ولصقت هذه الروابط في أي منشور على موقعك، فسوف يقوم بتنزيل كل هذه الصور محليًا وإنشاء نفس الـ sha، وبالتالي ستعمل هذه الروابط. يمكنك تجربة عدد قليل يدويًا لترى.

إنه منتصف الليل. قد تختلف النتائج.

إعجابَين (2)

مرحباً، لست متأكداً مما إذا كان هذا البرنامج التعليمي هو ما أريد القيام به، ولكني أطرح السؤال هنا.

إذا قمت بتثبيت Discourse على خادم، ولكن بسبب النمو أحتاج إلى الانتقال إلى خادم أقوى، فهل هذه هي الخطوات؟

ماذا يحدث، على سبيل المثال، مع خيار النسخ الاحتياطي؟ ألا يمكنني القيام بذلك، وتثبيت Discourse على خادم آخر ثم استعادة النسخة الاحتياطية من المثيل الآخر من هذا الخيار؟

أنتظر توضيحك، حيث أريد أن أعرف كيفية الترحيل عندما أحتاج إلى ذلك وعدم فقدان العمل الذي كنت أقوم به مؤخرًا.

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

لا. للانتقال إلى خادم أكبر، فإن النسخ الاحتياطي والاستعادة البسيط هو كل ما هو مطلوب. يمكنك أيضًا نقل موقع Discourse إلى VPS آخر باستخدام rsync

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

كنت أرغب منذ فترة طويلة جدًا في حل مشكلة هجرة ملفات الرفع (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!

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