ترحيل منتدى phpBB3 إلى Discourse

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

لقد حصلت على خطأ:
/var/www/discourse/plugins/discourse-migratepassword/plugin.rb:71:in `crypt’: incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError).

يبدو أن هذا يحدث مع المستخدم الثالث، وهذا المستخدم يحتوي على حرف مشكل (Umlaut).

الآن، ما الذي تغير منذ أن كانت العملية ناجحة؟

  • جهاز افتراضي جديد يعمل بنظام Ubuntu 18.04.3 LTS (كان الجهاز القديم يعمل بنظام 16)
  • تحديث Discourse (الإصدار الأحدث)
  • تم تعيين “أسماء مستخدمين يونيكود” مع [äöüßÄÖÜẞ] نظرًا لأن العديد من المستخدمين لديهم أحرف مشكلة في أسماء المستخدمين الخاصة بهم (كانت أول عملية استيراد تتم بدون هذا الإعداد، مما أدى إلى فقدان النقاط فوق الأحرف المشكلة عند استيراد المستخدمين)
  • تم تثبيت إضافة migratepassword مسبقًا (في المرة الأخيرة تم تثبيتها لاحقًا).

هل لديك أي فكرة عن سبب الفشل؟ أود حقًا نقل المستخدمين دون تغيير أسماء المستخدمين الخاصة بهم.

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

يبدو أن الأمر يُفعّل خللاً في إضافة migratepassword. إنها تعمل في اختباراتي، لذا لست متأكداً مما يحدث هنا. أنصحك بتعطيل الإضافة أثناء عملية الترحيل. فهي غير ضرورية أصلاً خلال الترحيل.

6 إعجابات

شكرًا لك - لقد نجح ذلك :slight_smile:

إعجابَين (2)

مرحبًا، أحاول إجراء تجربة على بيئتي المحلية لأرى ما إذا كان بإمكاني نقل منتداي إلى Discourse.

استخدمت دليل التثبيت هذا لتثبيت Discourse.

لدي تصدير لقاعدة بيانات phpBB3 محليًا.

لقد قمت بتثبيت Discourse محليًا على جهاز Mac الخاص بي باستخدام Docker for Desktop.

أحاول الآن اتباع التعليمات الواردة في هذا الموضوع، لكنني أتوقف لأنني أستخدم Docker، لكن ليس Ubuntu، كما أن البيئة محلية. لذا لا أعرف كيف أواصل :frowning:
لا يوجد ملف app.yml في مجلد Discourse الخاص بي.

هل يمكن لأي شخص مساعدتي في معرفة الخطوات التالية؟

شكرًا جزيلاً مقدمًا!

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

عذرًا، لا أملك أي خبرة في استخدام Mac أو Docker أو إعدادك الخاص. قد تتمكن من اتباع خطوات تقريبية من خلال الاستيراد باستخدام بيئة التطوير… لكنني لا أستطيع تقديم أي دعم لك في هذا الشأن.

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

أعتقد أنك ستكون في وضع أفضل إذا اتبعت “دليل التثبيت الرسمي” (حتى على جهاز Mac المحلي لديك) وقمت بتشغيل برنامج التثبيت بهذه الطريقة.

4 إعجابات

أهلاً، لقد نجحتُ بنجاح في عملية الاستيراد!
في النهاية، قررت فقط الحصول على قطرة من DigitalOcean والبدء من هناك. وقد نجح الأمر!

سؤال بخصوص Sidekiq، يقول @gerhard:

ما الذي يفعله هذا بالضبط؟ هل يجب أن أنتظر حتى ينتهي قبل أن أتمكن من فعل أي شيء في المنتدى؟

إعجابَين (2)

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

4 إعجابات

مرحباً، حاليًا أحاول استيراد بيانات من منتدى phpBB 3.1 إلى Discourse. لكن استيراد الاستطلاعات لا يعمل معي:

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

خطأ في إنشاء المنشور 70978. يتم تخطيه. [“ليس لديك صلاحية إنشاء استطلاعات.”]

أما فيما يتعلق بخيارات الاستطلاع التالية:
<12
12

12
فأستقبل رسالة الخطأ التالية:
خطأ في إنشاء المنشور 345655. يتم تخطيه. [“يجب أن تحتوي الاستطلاعات على خيارات مختلفة.”]

إذن، كيف يمكنني حل هذه المشكلة؟

شكرًا مقدّمًا

مع أطيب التحيات

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

هل قمت بتفعيل الاستطلاعات؟

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

نعم، تم استيراد بعض الاستطلاعات، لكن ليس جميعها.

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

ستحتاج إلى إنشاء ذلك المستخدم أو تعديل السكربت لاستخدام ‘system’ مثلاً في حال عدم وجود المالك.

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

يتم استيراد المواضيع العادية من المستخدمين المحذوفين بشكل صحيح. كيف يمكنني تعديل سكريبت الاستيراد لاستيراد الاستطلاعات من المستخدمين المحذوفين أيضًا؟

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

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

وسؤال آخر: هل إعادة كتابة الروابط في أداة الاستيراد آمنة لتغيير النطاق لاحقًا؟ كنت أخطط لاستخدام نطاق أو نطاق فرعي مختلف للهجرة الأولية، ثم التبديل إلى النطاق الفعلي لاحقًا.

3 إعجابات

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

يتطلب تغيير اسم المضيف بعض العمل. Change the domain name or rename your Discourse

4 إعجابات

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

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

ملاحظة جانبية: مباشرة بعد الاستيراد، لاحظت أن جميع الصور الرمزية مفقودة في الاقتباسات، لكنني اكتشفت لاحقًا أنها تبدو وكأنها تُنشأ تلقائيًا، ويبدو أنه بعد 20 دقيقة أصبحت جميعها موجودة الآن. مذهل :wink:

بشأن وقت الاستيراد: تم ذلك على خادم افتراضي خاص (VPS) من Hetzner بـ 4 أنوية معزولة للمعالج - أعتقد أنني سأعيد المحاولة على خادم معدني عاري فقط لعملية الاستيراد لتحسين وقت الهجرة. أحتاج أولاً إلى معرفة كيفية نقل نسخة احتياطية من discourse.

5 إعجابات

يوجد كود استبدال الروابط الداخلية هنا: discourse/script/import_scripts/phpbb3/support/text_processor.rb at 43ddf60cdf27a865b7b1aa0d54a144a3e46c74cf · discourse/discourse · GitHub

ستفشل عملية إعادة كتابة الروابط الداخلية عندما يحتوي المنشور على رابط إلى منشور آخر لم يتم استيراده بعد. يتم استيراد المنشورات بترتيب إنشائها الأصلي.

6 إعجابات

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

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

شكرًا لمساعدتك! :+1:

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

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

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

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

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

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