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

عذرًا على الرد مرة أخرى. أنا أتعبت في محاولة فهم سبب عدم إنشاء الروابط الدائمة. :frowning:

ملخص سريع:
أنا أستخدم عناوين URL القبيحة الافتراضية في SMF2 على نطاق النطاق الرئيسي الأعلى. تم تثبيت Discourse على نطاق فرعي من ذلك النطاق الرئيسي. لقد استخدمت أداة الاستيراد smf2.rb من أحدث مستودع Discourse لتحويل SMF2 إلى Discourse (متبعًا دليلك)، لكن لا توجد روابط دائمة في Discourse بعد انتهاء الاستيراد.

هل هناك خطوات إضافية مطلوبة، مثل إعدادات معينة أو إضافة (إضافات) تعمل على إما SMF2 أو Discourse؟

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

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

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

هذه هي وظيفة عناوين URL الجذابة في سكريبت الاستيراد: discourse/script/import_scripts/smf2.rb at main · discourse/discourse · GitHub

آمل الحصول على مساعدة لجعل هذا يعمل مع عناوين URL “القبيحة” الافتراضية لـ SMF… أي توجيه سيكون موضع تقدير كبير. :pray: شكرًا لكم يا رفاق.

لا أعرف. لكن أفضل إجابة مجانية لدي هي أنني أعتقد أن ما تريد مراجعته هو السطر 222 الذي يقول:

           Permalink.find_or_create_by(url: "forums/index.php/board,#{c["id_board"]}.0.html", category_id: category.id)

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

عذراً يا جاي على الرد عليك مرة أخرى، لكن السطر 222 أين؟ السطر 222 من ملف smf2.rb يحتوي فقط على:

if parent

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

أنا مشوش لأن النسخة التي ربطت بها تبدو وكأنها أحدث نسخة “رسمية”… لكنك الشخص الثاني الذي أشار إلى نسخة مختلفة. ما الذي فاتني؟ وأين يمكنني الحصول على نسختك؟

آه! عذرًا. يبدو أنني نقرت على سكريبت smf1. لذا انظر إلى smf1.rb1 الموجود بجانب سكريبت smf2.rb الذي تنظر إليه.

يمكنك إما النظر إلى سكريبت smf1 أو استخدام make_prettyurl_permalinks كنموذج لإنشاء make_uglyurl_permalinks. لكن هذا يعتمد على جدول عناوين URL الجميلة، لذا قد يكون من الأسهل استخدام smf1.rb كنموذج، لكنني سأحتاج إلى النظر إلى قاعدة البيانات لأتأكد. لا، هذا لن يساعد كثيرًا أيضًا ما لم تعدّل دوال create_xxx.

عذرًا. لا أرى إصلاحًا يمكن شرحه هنا.

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

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

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
جاري تحميل المجموعات الموجودة...
جاري تحميل المستخدمين الموجودين...
جاري تحميل الفئات الموجودة...
جاري تحميل المنشورات الموجودة...
جاري تحميل المواضيع الموجودة...
Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:701:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': تشفير RSA غير مدعوم - تم بناء مكون caching_sha2_password مع دعم GnuTLS (Mysql2::Error)

يرجى مساعدتي في حل هذه المشكلة.

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

حاوية Docker الخاصة بـ MySQL هي الإصدار 8، وهذا يعني لسبب ما أن مكتبة MariaDB التي يستدعيها قالب MySQL لا تعمل.

لم أقدم ملف قالب MySQL في ملف تكوين حاوية استيراد Docker، وكان هذا هو التغيير الأول.

لقد قمت ببناء حاوية الاستيراد، ودخلت إليها باستخدام الأمر ./launcher enter import

ثم:

echo "gem 'mysql2'" >> Gemfile
wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
dpkg -i mysql-apt-config_0.8.17-1_all.deb

هناك موجه تفاعلي ويمكنك اختيار الإعدادات الافتراضية (MySQL 8 مع الأدوات).

ثم قمت بتثبيت مكتبة MySQL 8 العادية واستمريت في البناء:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'bundle config unset deployment'
su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'

بمجرد الانتهاء من كل هذا، كان الباقي كما هو، والآن يعمل الاستيراد.

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

3 إعجابات
  1. هل يجب التدمير وفقًا لهذه التعليمات؟ how-to-migrate-import-from-smf2-to-discourse/90129#cleanup-5

  2. قمت بنقل مجلد المرفقات يدويًا من SMF2 إلى Discourse قبل الاستيراد، ثم شغّلت أداة الاستيراد مرة واحدة، لكن الملفات المرفقة لا تظهر في المنشورات على Discourse. هل لديك أي فكرة عن السبب؟

  3. لقد شغّلت أداة الاستيراد مرة واحدة بالفعل دون تمكين S3، لكنني أريد استخدام S3. ماذا يجب أن أفعل؟

  1. نعم
  2. Hmm… سأجرب تمكين S3 وإعادة الاستيراد.
  3. قم بتمكين S3 قبل بدء الاستيراد.
إعجاب واحد (1)

لقد شغّلت أداة الاستيراد مرة واحدة بالفعل دون استخدام S3. هل سيتم نقل الملفات المرفقة من المواضيع التي تم استيرادها مسبقًا إلى S3 خلال عملية الاستيراد التفاضلي؟

من الأفضل أن تبدأ من جديد وتمكّن S3 قبل الاستيراد.

الحصول على هذه الرسالة عند إنشاء المستخدمين:

oxipng worker: لم يتم العثور على oxipng؛ يرجى توفير الملف التنفيذي الصحيح أو تعطيل هذا العامل (استخدام وسيطة --no-oxipng أو تعيين :oxipng => false عبر الخيارات)

ثم بعد ذلك يبدأ في إنشاء المنشورات.

  • هل يمكن أن يكون هذا هو السبب في عدم ظهور المرفقات في Discourse؟
  • أين يجب تثبيت oxipng؟

تحديث: أنا مشوش بشأن سبب ظهور رسالة خطأ oxipng هذه. لا أستطيع العثور على أي شيء عنها في أي مكان في Discourse، وأنا أواجه هذه المشكلة فقط عند تشغيل سكربت استيراد smf2. هل يمكن أن يكون ذلك مرتبطًا بهذا؟ https://meta.discourse.org/t/faster-and-smaller-uploads-in-discourse-with-rust-webassembly-and-mozjpeg-blog

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

إعجابَين (2)

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

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

هل تقصد تعديل المنشور في smf2 لإضافة روابط للملفات المرفقة قبل الاستيراد إلى Discourse؟

حسنًا، قد تكون هذه طريقة.

لكنني أعني تعديل سكريبت الاستيراد لإرفاق المرفق بالمشاركة الخام. شيء مثل