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

ربما تفتح تذكرة مع Duffield Ocean بخصوص أن الأحرف غير صحيحة؟

قد تستخدم عميل SSH مثل PuTTY أو الواجهة الطرفية الجديدة التي أعتقد أنها جزء من نظام الفرعية لنظام لينكس في ويندوز (النسخة الأخيرة من ويندوز التي استخدمتها كان اسمها يحتوي على سنة، لذا لا يمكنني المساعدة كثيرًا). إذا كنت تستخدم جهاز ماك، فما عليك سوى فتح نافذة طرفية واستخدام ssh.

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

إعجابَين (2)

شكرًا لك @pfaffman. أعتقد أنني سأتواصل معهم بشأن ذلك.

يمكنني تجربة عميل SSH مختلف ورؤية ما إذا كان يعمل بشكل أفضل.

قاعدة البيانات ليست كبيرة جدًا. لقد مرت ساعة وهي لا تزال في نفس المكان. لقد تفحصت وحدة المعالجة المركزية في الخادم وهي في وضع الخمول تقريبًا.

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

نعم، هذه كانت المشكلة! شكراً جزيلاً مرة أخرى @pfaffman. نواصل التقدم مرة أخرى…

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

إذا مرّ ساعة، فمن المرجّح أن العملية لم تحدث. يمكنك تجربة أمر مثل:

 cat database.sql | mysql
إعجاب واحد (1)

خطوة للأمام، خطوة للخلف.

Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "LETSENCRYPT_ACCOUNT_EMAIL ENV variable is required and has not been set."; exit 1; fi failed with return #<Process::Status: pid 1187 exit 1>

لم يكن letsencrypt مثبتًا لدي، لذا قمت بتثبيته.

ما تم إغفاله في “إعداد مضيف وحاوية Discourse للاستيراد” هو أنك بحاجة إلى إزالة التعليق عن سطر env الخاص بـ LETSENCRYPT_ACCOUNT_EMAIL وإدخال عنوان بريدك الإلكتروني. وهذا ما ساعدني في تجاوز هذا الخطأ.

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

Traceback (most recent call last):
        1: from script/import_scripts/smf2.rb:4:in `<main>'
script/import_scripts/smf2.rb:4:in `require': cannot load such file -- mysql2 (LoadError)

بحثت كثيرًا عبر الويب، لكن دون جدوى حتى الآن.

تعديل: أعتقد أن المشكلة قد تكون في أن mysql غير مُثبَّت داخل الحاوية. لقد حاولت تشغيل أمر ‘gem install mysql2’، لكنه أرجع لي:

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.

تعديل 2:
لقد تمكنت أخيرًا من تثبيت mysql2. أولاً، كان عليّ تثبيت أدوات التطوير، لكن المصدر المقترح لم يكن متاحًا. لذا قمت بتشغيل:

sudo apt-get install default-libmysqlclient-dev

ومن ثم تمكنت من تنفيذ:

gem install mysql2

لكنني ما زلت أحصل على نفس الخطأ. لذا جربت وضع تعليق على أمر الـ require في السكريبت فقط لأرى ماذا سيحدث. فظهرت لي رسالة خطأ جديدة:

Traceback (most recent call last):
        6: from script/import_scripts/smf2.rb:627:in `<main>'
        5: from script/import_scripts/smf2.rb:19:in `run'
        4: from script/import_scripts/smf2.rb:447:in `parse!'
        3: from script/import_scripts/smf2.rb:502:in `parser'
        2: from script/import_scripts/smf2.rb:502:in `new'
        1: from /usr/local/lib/ruby/2.6.0/optparse.rb:1089:in `initialize'
script/import_scripts/smf2.rb:504:in `block in parser': can't modify frozen String (FrozenError)

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

انتقل إلى ملف smf2.rb وقم بتغيير السلسلة المجمدة من true إلى false أو العكس، وهي موجودة في السطر الأول أو الثاني. سيعمل الأمر بعد ذلك.

إعجابَين (2)

شكرًا لك @Paracelsus! تم حل المشكلة. قمت بتغيير القيمة من true إلى false.

خطوة أخرى نحو الأمام!

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

الآن أعمل على حل ما يلي:

Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:627: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.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (Mysql2::Error::ConnectionError)

أفترض أن هذا السطر في ملف ضبط الإعدادات مخصص لمعالجة هذه المشكلة:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

هل يجب إضافته في مكان ما داخل حاوية الاستيراد؟

حسناً، لقد عرفت المشكلة المذكورة أعلاه. هذه مشكلة تتعلق بأحدث إصدار من MySQL، حيث لم يعد يدعم كلمات المرور الأصلية القديمة. أسهل طريقة لحل هذه المشكلة هي تشغيل هذه العملية باستخدام MySQL 5.7. فقط قم بتغيير الخطوة 3 من:

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql

إلى

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql:5.7

وعندها ستتمكن من إتمام العملية بنجاح. عملية الاستيراد الخاصة بي تعمل الآن أخيراً.

إعجابَين (2)

سؤال جديد: لا أستطيع استيراد صور المستخدمين. هل من المفترض أن يكون الأمر هكذا؟

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

بخلاف ذلك، كل شيء يسير على ما يرام حتى الآن. هذا الدليل رائع، واستيراد قاعدة البيانات التدريجي يعمل بشكل ممتاز أيضًا :+1:.

إعجابَين (2)

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

نعم، كانوا موجودين، لكنني قمت بنقل الصور الرمزية إلى مجلد آخر ونسيت نسخها إلى مجلد الصور الرمزية الذي يستخدمه الاستيراد لمطابقتها مع المستخدم. تم حل المشكلة (حتى لو اضطررت لإعادة إنشاء عملية الاستيراد).

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

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

أنا أستخدم أحدث إصدار من SMF v2.0.17 وهو الإصدار التجريبي v2.50 beta2، وقد تم إنشاء ملف smf2.rb مختلف بسبب الملف الحالي:
templates/import/mysql-dep.template.yml
كما هو موضح في الخطوة 4، باستبدال “quote =”، فإن التكرار الحالي هو:

quote = +“\n[quote="#{params[‘author’]}”

وبالإضافة إلى ذلك، لا يوجد:

ومع ذلك، قمت بتنفيذ عملية الاستيراد على أي حال، لكنها توقفت بسبب الرسالة “IGNORE_BBCOD هل تقصد IgnoreUser؟”
آسف، كان ينبغي عليّ التقاط صورة للشاشة التي تظهر فيها تتبع الأخطاء (Traceback) لكنني لم أفعل، على أي حال، هذا ما أتذكره.
هل لديكم أي أفكار؟
شكرًا.

لقد قمت بتحديث هذا السكربت مؤخرًا. سألقي نظرة.

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

شكرًا جزيلاً لك! سؤال: إذا بدأت من جديد، هل سيستبدل ما استوردته بالفعل؟ أي المستخدمين والفئات.
تحياتي!
ج.

بشكل عام، لا. فبرامج الاستيراد ذكية بما يكفي للبقاء حيث توقفت!

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

يجب أن يكون @tradenet مُصلَحًا الآن هنا:

نعتذر عن ذلك!

سيكون متاحًا في tests-passed بمجرد اكتمال جميع الفحوصات.

3 إعجابات

شكرًا لك على انتباهك اللطيف.
ج.

إعجابَين (2)

هل ستكون روابط SMF القديمة غير صالحة بعد التحويل إلى Discourse؟

ليس حقًا. سيقوم المستورد بإنشاء روابط دائمة تتطابق مع الروابط القديمة (وتعيد توجيهها) إلى المسارات الجديدة الخاصة بها.