مشكلة ترحيل SMF2 إلى Discourse

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

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
جاري تحميل المجموعات الموجودة...
جاري تحميل المستخدمين الموجودين...
جاري تحميل الفئات الموجودة...
جاري تحميل المنشورات الموجودة...
جاري تحميل المواضيع الموجودة...
تتبع الأخطاء (آخر رسالة):
        7: من script/import_scripts/smf2.rb:701:in `<main>'
        6: من script/import_scripts/smf2.rb:28:in `run'
        5: من script/import_scripts/smf2.rb:28:in `new'
        4: من script/import_scripts/smf2.rb:62:in `initialize'
        3: من script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: من script/import_scripts/smf2.rb:274:in `new'
        1: من /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)

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

حسناً، إذا صادفتم هذا النص، فقد اضطررت إلى بذل جهد كبير لضبط هذا النص البرمجي للاستيراد وجعله يعمل.

حاوية Docker الخاصة بـ MySQL هي الإصدار 8.

وهذا يعني لسبب ما أن مكتبة MariaDB التي يجلبها قالب MySQL لا تعمل.

ما فعلته بشكل مختلف عما ورد في https://meta.discourse.org/t/smf2-to-discourse-the-ultimate-guide/90314:

لم أقم بتضمين ملف قالب 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 إعجابات