نقل منتدى XenForo إلى Discourse

هل من الآمن إعداد مستويات الثقة والشارات وإعدادات Discourse الأخرى قبل الاستيراد؟ أفكر في أن هذا المستورد سيقوم فقط بإدراج/استبدال المشاركات/المواضيع/الملفات الشخصية؟ أود أن أتجنب إعداد كل شيء في إعدادات Discourse وأن يقوم هذا بمسح تلك الإعدادات، على الرغم من أنني لا أرى شيئًا في الكود يتعلق بذلك على الفور.

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

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

4 إعجابات

إذًا، هناك شيئان. أولاً، هل هناك طريقة لجعل هذا يعمل بشكل أسرع؟ أنا أستخدم جهاز Linode بـ 32 وحدة معالجة مركزية و 64 جيجابايت من ذاكرة الوصول العشوائي ولا يزال الأمر يستغرق 4-5 ساعات لاستيراد 250 ألف مشاركة.

ثانيًا، هل يستورد المرفقات قبل أو بعد المشاركات؟ لأنه بالنظر إلى البرنامج النصي يبدو أنه يقوم بذلك بعد ذلك. إنه أمر محبط الانتظار لمدة 4-5 ساعات فقط لمعرفة أن المرفقات لم يتم استيرادها.

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

يمكنك تعديل البرنامج النصي لاستيراد التحميلات الحديثة فقط، ولكن إذا لم تكن تخطط لإجراء تطوير كبير، فانتظر فقط 5 ساعات.

إعجابَين (2)

حسنًا، لقد جربت هذا عدة مرات الآن ولم يتم استيراد المرفقات، وقد نفدت أفكاري. آمل أن يتمكن شخص ما من مساعدتي (شكرًا @pfaffman على مدخلاتك حتى الآن).

لقد وضعت ملفات *.data في هيكل المجلد الأصلي الخاص بها من xenforo (لذا، مجلد ‘attachments’) في /root/attachments في حاوية docker. لقد قمت بتحديث البرنامج النصي للاستيراد إلى /root/attachments. يمكنني رؤية الملفات في /root/attachments من سطر الأوامر باستخدام ls.

لقد قمت بتشغيل البرنامج النصي، وفي كل مرة (بعد انتظار حوالي 4-5 ساعات)، تعرض جميع المشاركات التي تحتوي على مرفقات/صور bbcode القديم من xenforo ([ATTACH]123456[/ATTACH]) ولا أرى أي صور أو مرفقات في تثبيت discourse.

ما الذي يمكن أن أفعله بشكل خاطئ هنا؟ أشعر أنني على وشك الانتهاء، أنا فقط أفتقد شيئًا ما.

سيتعين عليك إلقاء نظرة على الكود. هل يعمل كود المرفقات على الإطلاق؟ هل المرفقات الخاصة بك بالتنسيق الذي يتوقعه البرنامج النصي؟

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

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

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

حتى ذلك الحين، سأعتبر هذا البرنامج النصي معطلاً.

[اقتباس=“moshbit, post:82, topic:45232”]
حتى ذلك الحين، سأعتبر هذا النص البرمجي معطلاً.
[/اقتباس]

ربما يعمل لدى بعض الأشخاص مع إصدار ما وبعض التكوينات، ولكن ليس ذلك الذي تستخدمه. من المدهش مدى اختلاف كل استيراد.

هل النص البرمجي الرسمي للاستيراد من xenForo معطل الآن؟

يتم استيراد المستخدمين والفئات بشكل جيد،
ولكن عند استيراد المشاركات مع مجلد المرفقات تحدث مشاكل

script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
   113289 / 146471 ( 77.3%)  [3766 items/min]  Exception while creating post 162516. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
   113290 / 146471 ( 77.3%)  [3766 items/min]  Exception while creating post 162517. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc

ما هي نسخة Redis التي لديك؟

تمكنت بصعوبة من نقل مجتمعي الحالي المبني على XenForo إلى Discourse، لذا فكرت في مشاركة تجربتي هنا لمساعدة أي شخص يحاول فعل الشيء نفسه. ضع في اعتبارك أنني لا أعرف ما أفعله، لذا قد تكون بعض استنتاجاتي غير صحيحة. تمكنت من إكمال الاستيراد إلى Discourse مع خسارة حوالي 20٪ من المرفقات. لا يمكنني حقًا تفسير السبب، لكن المشكلة يبدو أنها تؤثر فقط على آخر 2-3 سنوات من المشاركات في منتداي، بينما كان كل ما قبل ذلك معدل استيراد ناجح بنسبة تزيد عن 95٪. تخميني الوحيد هو أن الأمر يتعلق بالانتقال من XF 1.x إلى XF 2.x.

يجب على أي شخص يحاول القيام بذلك أن يعرف أن هذا البرنامج النصي يحتاج إلى الكثير من التحديثات للعمل مع XF 2.x. على وجه التحديد، لا تحتوي الأسطر 375-378 على جداول قاعدة البيانات الصحيحة لاستيراد المرفقات من Xenforo Media Gallery. لقد تغلبت على ذلك عن طريق فصل XFMG عن المنتدى وإلغاء تثبيته، نظرًا لأنني كنت أستخدم XFMG فقط لنسخ المرفقات من المنتدى على أي حال.

إذا كنت فضوليًا، فإن السطر 376 يشير إلى الجدول xengallery_media، وهو بوضوح إشارة إلى XFMG 1.x، حيث تم تغيير هذا الجدول إلى xf_mg_media_item في XFMG 2.x. الباقي لا يمكنني مطابقته وأشك في أن بعض التعليمات البرمجية الإضافية مطلوبة لمطابقة معرفات المرفقات مع المشاركات.

انتهى بي الأمر بالتعليق على السطر 314: s = process_xf_attachments(:gallery, s)

حتى لا يخرج البرنامج النصي عن الخطأ بسبب جدول SQL المفقود.

بعد ذلك، اتبعت منشور @Jack51 في هذا الموضوع:

مع التعديلات التالية:

تحتاج الخطوة السادسة إلى تحديث إصدار mariadb. قم بتغيير mariadb-server-10.3 إلى mariadb-server-10.5

يجب أن تكون الخطوة السابعة service mariadb start بدلاً من service mysql start.

لقد قمت بتغيير

frozen_string_literal: true

إلى

frozen_string_literal: false

نظرًا لأنني حصلت على نفس الخطأ الذي ذكره شخص آخر في هذا الموضوع.

يبدو أنه كان هناك الكثير من الارتباك في هذا الموضوع حول مكان وضع المرفقات حتى يتمكن البرنامج النصي من رؤيتها، واعترف بأنني واجهت بعض الصعوبة في هذا أيضًا. بالنسبة للأشخاص الجدد تمامًا على docker (مثلي)، سيكون من المفيد للغاية الإشارة إلى أنه بينما تعد dockers في الأساس آلة افتراضية تعمل على خادمك (لذا فأنت تتعامل مع نظامي تشغيل / نظامي ملفات مختلفين)، هناك مساحة مشتركة لنقل الملفات:

/var/discourse/shared/standalone/tmp

يقع هذا الدليل على جهازك المضيف، وستظهر الملفات الموضوعة هناك في:

/shared/tmp

عندما تدخل حاوية docker. لذا، بافتراض أنك تحتفظ بنفس بنية الملفات / المجلدات من xenforo، فستقوم بنسخ المجلدات:

internal_data/attachments

إلى

/var/discourse/shared/standalone/tmp

على جهازك المضيف، وسيظهر هذا المجلد في /shared/tmp بعد الدخول إلى حاوية docker الخاصة بك.

بعد ذلك، عند تحرير البرنامج النصي xenforo.rb، قم بتغيير:

ATTACHMENT_DIR = '/tmp/attachments'

إلى

ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'

وسيكون لديك المرفقات في الموقع الصحيح. تجدر الإشارة إلى أن xenforo لديه أيضًا مجلد data/attachments، ولكنه مليء بملفات .jpg بدلاً من ملفات .data التي تبحث عنها. رأيت شخصًا ارتكب هذا الخطأ سابقًا في هذا الموضوع لذا اعتقدت أنه يستحق الإشارة إليه.

أيضًا، حصلت على خطأ في الأذونات من البرنامج النصي، لذا قد تحتاج إلى chmod الدليل:

sudo chmod a+rw -R /shared/tmp/internal_data/

أعتقد أن أكبر دليل على أن البرنامج النصي لا يلتقط المرفقات الخاصة بك هو أنه سيكون هادئًا بشكل غريب بينما يجب أن يكون بدلاً من ذلك يخرج الخطأ العرضي:

لذا، إذا استمر الاستيراد لعدة ساعات دون إدراج خطأ واحد، فمن المحتمل أنه لا يلتقط المرفقات.

هذا كل ما لدي. لا تفهموني خطأ، أنا سعيد بوجود هذا البرنامج النصي على الإطلاق، فمعدل نجاح 80٪ أفضل من لا شيء (كان لدي معدل نجاح مماثل عند الانتقال من vBulletin إلى Xenforo في عام 2009)، وأنا متحمس للعمل مع منصة Discourse. نأمل أن يساعد هذا المنشور بعض الأشخاص وربما في يوم من الأيام سيقوم شخص يتمتع بمهارات أفضل مني بتحديث هذا البرنامج النصي ليعمل بشكل أفضل قليلاً.

4 إعجابات

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

5 إعجابات

@gerhard أعتقد أن طلب الدمج هذا في عهدتك حاليًا، هل يمكنك دمجه عندما يكون لديك بعض الوقت؟

إعجابَين (2)

نعم، لاحظت ذلك بالأمس. :blush: لقد نسيت الأمر تمامًا. سأراجعه اليوم أو الأسبوع المقبل.

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

هل تم دمج هذا في الكود الآن؟ اضطررت للعودة إلى xenforo لأسباب أخرى، لكنني أود الانتقال إلى discourse عندما يعمل هذا السكربت.

عذرًا، كان يجب أن أتحقق من github فقط، يبدو أنه تم دمجه في 28 نوفمبر.

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

تم تقسيم 6 مشاركات إلى موضوع جديد: ثابت AVATAR_DIR غير محدد في نص استيراد XenForo

أردت فقط المتابعة وإعلام أي شخص يحاول الابتعاد عن Xenforo (يجد هذا الموضوع عبر جوجل أو غيره) بوجود مستورد قيد الاختبار لبرنامج Flarum للمنتديات هنا:

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

مثير للاهتمام، ولكن سيكون الأمر أكثر إثارة للاهتمام إذا كان لدينا مستورد قوي من Xenforo إلى Discourse.
يبدو الرجل واثقًا جدًا مما يفعله وأنا أصفق له!

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

لقد أجريت استيرادًا لـ xenforo مؤخرًا. لقد قمت بإجراء بعض التغييرات لإضافة بعض الميزات ولكن لا يمكنني تذكر الآن أي منها لم يكن خاصًا بهذا المنتدى.

هل هذه التعليمات قديمة بالنسبة لأوبونتو 22.04؟

بعد تمكني من تثبيت MYSQL يحدث هذا:

root@root-app:/# sudo mysql
ERROR 2002 (HY000): لا يمكن الاتصال بخادم MySQL المحلي عبر المقبس ‘/var/run/mysqld/mysqld.sock’ (2)