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

مثير للإعجاب! حتى لو كان موقع SMF القديم الخاص بي لا يستخدم عناوين URL جميلة؟

ماذا تقصد بـ ‘ليس حقًا’؟

إليك إجابات على أسئلتك:

  1. نعم، ولكن…
  2. ليس تمامًا، يعني أن الروابط إلى معرف الموضوع (مثل index.php?topic=123) سيتم إنشاؤها كروابط دائمة وستعمل، لكن الروابط التشعبية إلى منشورات محددة مثل index.php?topic=123.msg789#msg789 لن تُحفظ/تعمل بعد الآن. يتم اختصارها إلى معرف الموضوع.

فيما يلي مثال على الروابط الدائمة من منتداي، تم استيراده من SMF2

image

إعجابَين (2)

على الأقل، سيبقى الموضوع مرجعًا للمشاركات المحددة. هذا كافٍ تمامًا. رائع، شكرًا جزيلاً على ردك ولتجميع هذه التعليمات.

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

عذرًا، نسيت أن أسأل: إذا كان نظام SMF الخاص بي مُعدًا على شكل فئة → لوحة → لوحة فرعية، فهل يجب عليّ أولاً إزالة الفئة “اللوحة” ليصبح الهيكل من مستويين فقط (منتدى → منتدى فرعي) لضمان التحويل السليم إلى Discourse؟

مرحبًا @marcozambi،

أنا مهتم بمعرفة كيف نجحت في جعل هذا يعمل. لقد استخدمت أداة الاستيراد في 19 أكتوبر لاستيراد منتدى كبير من SMF إلى Discourse، وفُقدت جميع الروابط بالتنسيق القديم تقريبًا (أي أنني أحصل على خطأ 404 عند استخدام الروابط القديمة).

على سبيل المثال، الرابط القديم:

كان يشير إلى الموضوع التالي:

هل تمانع في مشاركة “الحيلة” التي استخدمتها؟ :grin:

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

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

هذا صحيح. تحتاج إلى “تسطيح” شجرة المنتديات الفرعية الحالية الخاصة بـ SMF إلى مستويين.

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

نعم، وأشكرك على منشورك الرائع، لقد اتبعتُه بدقة وتمكنتُ بنجاح من نقل منتدى يحتوي على 6 ملايين منشور.

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

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

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

:+1:

كان فارغًا، كما توقعت. هذا يعني أن جزءًا من السكربت لم يعمل في حالتنا. :neutral_face: حسنًا، لا يزال بإمكاني بناء بعضها يدويًا (جربت للتو ونجحت في المثال الذي نشرته أعلاه).

هل يُفترض أن تكون هذه الخطوة تفاصيل قاعدة بيانات SMF2 القديمة، أم يجب أن تكون بالضبط ‘user’ و ‘pass’ و ‘db’؟

هل يُفترض أن تكون هذه الخطوة تفاصيل قاعدة بيانات SMF2 القديمة، أم بالضبط كما هو محدد؛ ‘db’ و ‘user’ و ‘pass’؟

هل هذه هي الخطوة الوحيدة التي يُفترض أن أستخدم فيها تفاصيل قاعدة بيانات SMF2 القديمة الأصلية؟

هذه هي بيانات الاعتماد للاتصال بمثيل MySQL المدمج في حاوية Docker حيث تم استيراد نسخة احتياطية لقاعدة بيانات منتدى SMF الخاص بك.
وللتوضيح، فإن MySQL المدمج في حاوية Docker يعمل على نفس الخادم الذي يعمل عليه Discourse، وهو مطلوب فقط لتخزين النسخة الاحتياطية التي يجب أن تكون قد قمت بها لقاعدة بيانات SMF.

هذا هو الأمر الذي يجب عليك تنفيذه على الخادم الذي يستضيف قاعدة بيانات SMF2 الأصلية للحصول على نسخة احتياطية، والتي ستحتاج بعد ذلك إلى استيرادها في مثيل MySQL المدمج في حاوية Docker المذكور أعلاه.

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

شكرًا لك على الرد.

نعم، لقد قمت بالفعل باستيراد قاعدة بيانات smf2 الأصلية إلى خادم Discourse في مثيل MySQL المُحمّل داخل Docker.

مع معلومات MySQL المُحمّل داخل Docker في ملف Settings.php، أواجه هذه الرسالة عند تشغيل سكريبت الاستيراد:

جاري تحميل المجموعات الموجودة…

جاري تحميل المستخدمين الموجودين…

جاري تحميل الفئات الموجودة…

جاري تحميل المنشورات الموجودة…

جاري تحميل المواضيع الموجودة…

جاري إنشاء المجموعات

تتبع الأخطاء (الأحدث أولاً):

11: من الملف script/import_scripts/smf2.rb:701: في `’

10: من الملف script/import_scripts/smf2.rb:28: في `run’

9: من الملف /var/www/discourse/script/import_scripts/base.rb:47: في `perform’

8: من الملف script/import_scripts/smf2.rb:66: في `execute’

7: من الملف script/import_scripts/smf2.rb:77: في `import_groups’

6: من الملف script/import_scripts/smf2.rb:281: في `query’

5: من الملف script/import_scripts/smf2.rb:287: في `__query’

4: من الملف /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22: في `query’

3: من الملف /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130: في `query’

2: من الملف /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130: في `handle_interrupt’

1: من الملف /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131: في `block in query’

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131: في `_query’: جدول ‘db.smf_membergroups’ غير موجود ( خطأ Mysql2 )

هل لديك أي أفكار؟

لقد اتبعت هذا الدليل حرفيًا عدة مرات، لكنني أعلق دائمًا عند هذه النقطة.

شكرًا لك.

تحقق في قاعدة بيانات MySQL الخاصة بك ما إذا كانت جدول smf_membergroups موجودًا. إذا لم يكن موجودًا، فإما أن:

  1. تحتاج إلى تعديل السكربت ليتوافق مع اسم جدول مختلف، أو
  2. تتخطى استيراد المجموعات إذا لم تكن هناك أي مجموعات موجودة
إعجابَين (2)

امتداد الملف في النهاية لا يهم. إذا كان الملف يحتوي على جمل SQL صالحة، فسيتم تحميله بغض النظر.

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

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

إعجابَين (2)

استخدام بيانات الاعتماد نفسها من قاعدة بيانات smf2 لنسخة MySQL في Docker حل مشكلتي. شكرًا لكم يا رفاق!

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

@Paracelsus يبدو أنني في نفس الموقف؛ الروابط الدائمة فارغة. :frowning:

يعمل smf2 الخاص بي على النطاق الجذري بينما يعمل Discourse على نطاق فرعي للنطاق الجذري لـ smf2. هل لهذا أهمية؟

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

في حالتنا، استخدمنا الإصدار الأول بعنوان discourse.forumscp.com، بينما ظل forumscp.com يعمل على SMF كـ “المنتدى الرئيسي” لفترة من الوقت (لنتمكن من اختبار الأشياء في Discourse والتعود عليه). جربت عملية التحديثات التدريجية عدة مرات، ثم مرة أخرى قبل بضعة أسابيع للتأكد من أن الانتقال سيعمل كما يجب. وفي يوم الانتقال، أغلقنا المنتدى القديم، قمنا بأحدث تحديث تدريجي لقاعدة البيانات من SMF إلى Discourse، ثم غيرنا النطاق اتباعًا للإرشادات المتوفرة هنا أو هناك. كما احتجنا إلى مساعدة من مزود الاستضافة للتحقق من إعدادات Nginx، ولا أتذكر التفاصيل بالضبط، لكن كان هناك شيء يتعلق بـ DNS كان علينا تغييره. ومع ذلك، اتبعنا ببساطة تعليمات مزود الاستضافة، ومرت كل شيء بسلاسة.

يمكنك البحث عن مستورد آخر يدعم الروابط الدائمة ونسخ الكود. يُعد vBulletin و phpBB أمثلة جيدة على ذلك.