مشكلة في استيراد q2a

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

لقد استندت في ذلك إلى موضوع vBulletin

تثبيت Docker على الخادم

الخطوات:

  1. قمت بتثبيت Discourse باستخدام دليل 30 دقيقة وعمل بشكل ممتاز.
  2. دخلت إلى التطبيق باستخدام الأوامر التالية:

cd /var/discourse
./launcher enter app

  1. قمت بتثبيت MariaDB لأنني لم أستطع تثبيت MySQL:

apt-get update && apt-get install libmariadb-dev mariadb-server-10.3

  1. بعد الانتهاء من تثبيت MariaDB، تحقق من حالته وقم بتشغيله:

sudo service mysql status
sudo service mysql start

  1. تثبيت المكتبات المطلوبة

echo “gem ‘mysql2’, require: false” >> /var/www/discourse/Gemfile
echo “gem ‘php_serialize’, require: false” >> /var/www/discourse/Gemfile
cd /var/www/discourse
su discourse -c ‘bundle install --no-deployment --without test --without development --path vendor/bundle’

  1. استيراد قاعدة البيانات

mysql -uroot -p -e ‘CREATE DATABASE q2adb’
mysql -uroot -p q2adb < q2a-old-db.sql

  1. exported المتغيرات التالية، لا أملك أي مرفقات لذا لم أقم بتصدير ذلك المتغير. أيضًا لم أقم بتعيين كلمة مرور للمستخدم root.

export DB_NAME=“q2adb”
export DB_USER=“root”
export DB_PW=“”
export TABLE_PREFIX=“qa_”
export TIMEZONE=“America/Los_Angeles”

cd /var/www/discourse
su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’

هذا هو الخطأ الذي حصلت عليه بعد تشغيل الأمر التالي.

/var/www/discourse# su discourse -c ‘bundle exec ruby script/import_scripts/question2answer.rb’
root:@localhost wants q2adb
Loading existing groups…
Loading existing users…
Loading existing categories…
Loading existing posts…
Loading existing topics…

Access denied for user ‘root’@‘localhost’
Cannot connect in to database.

Hostname: localhost
Username: root
Password:
database: q2adb

قم بتعديل السكربت أو قم بتعيين متغيرات البيئة التالية:

export DB_HOST=“localhost”
export DB_NAME=“”
export DB_PW=‘password’
export DB_USER=“root”
export TABLE_PREFIX=“qa_”

خروج.

إما أن تحتاج إلى تعيين كلمة مرور أو ربما اسم مستضيف؟ هل قمت بتثبيت MySQL داخل الحاوية؟

هل يمكنك الاتصال بـ MySQL من سطر الأوامر والتحقق من وجود بيانات هناك. (أظهر الجداول :wink:

@pfaffman
أنا داخل الحاوية.

لقد جربت تعيين اسم المضيف (Hostname) إلى localhost، و ‘127.0.0.1’، و ip-171-22-11-150 (وهذا ما يظهر كاسم مضيف عند تنفيذ الأمر hostname)، وكذلك عنوان IP الفعلي للخادم.

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

هل فاتني أي خطوة؟

يا خبراء ديسكورش، من فضلكم ساعدوني في هذا. لا أعرف كيف أواصل في الوقت الحالي.

شكرًا لكم مقدمًا على مساعدتكم!

الطريقة التقليدية لتحفيز الناس على تقديم مساعدة إضافية لك هي دفع المال مقابل ذلك، يمكنك النشر في Marketplace مع تحديد ميزانية.

مرحبًا بمجتمع Discourse،

@sat هل وجدت حلًا لهذه المشكلة حتى الآن؟

واجهت نفس الخطأ أثناء محاولة الترحيل من vBulletin5 باستخدام جزء Docker من نفس الموضوع.

لقد قمت أيضًا بتثبيت MariaDB بدلاً من MySQL:

apt-get update && apt-get install libmariadb-dev mariadb-server-10.3

استوردت بيانات SQL الخاصة بي، وأستطيع الاتصال بقاعدة البيانات ورؤية أن الجداول قد تم إنشاؤها:

mysqlcheck -c vb5  -u root -p

في البداية، استخدمت بيانات الدخول الافتراضية (root / فارغ)، وفي المحاولة الثانية قمت بتعيين كلمة مرور لمستخدم root:

export DB_NAME="vb5"
export DB_USER="root"
export DB_PW="password1234"
export TABLE_PREFIX="vb5."
export ATTACHMENT_DIR='/vb5-attachments'
export TIMEZONE='Europe/Berlin'

cd /var/www/discourse
su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'

أنا لست متأكدًا بشأن TABLE_PREFIX هنا. لكن جميع أسماء الجداول تبدأ بـ vb5. في التثبيت الافتراضي لدي، لذا أعتقد أن هذا يجب أن يكون مقبولًا (لقد جربت أيضًا تركه فارغًا).

لكن المشكلة الرئيسية هي أنني لا أستطيع الاتصال بقاعدة بيانات MariaDB باستخدام مستخدم discourse:

su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
Traceback (most recent call last):
        5: from script/import_scripts/vbulletin5.rb:632:in `<main>'
        4: from script/import_scripts/vbulletin5.rb:632:in `new'
        3: from script/import_scripts/vbulletin5.rb:27:in `initialize'
        2: from script/import_scripts/vbulletin5.rb:27: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': Access denied for user 'root'@'localhost' (Mysql2::Error)
su discourse
mysqlcheck -c vb5  -u root -p
Enter password: #password1234
mysqlcheck: Got error: 1698: Access denied for user 'root'@'localhost' when trying to connect

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

  1. اتصل بحاوية Discourse بصلاحيات root.
  2. اتصل بقاعدة بيانات MariaDB
mysql -u root -p
*أدخل كلمة المرور الخاصة بك*
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
EXIT;

بعد ذلك، انتقل إلى مستخدم discourse وحاول الاتصال بقاعدة البيانات باستخدام حساب root:

su discourse
mysql -u root -p
أدخل كلمة المرور: #password1234

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

الآن، اخرج من مستخدم discourse وحاول تشغيل برنامج الترحيل مرة أخرى:

exit
su discourse -c 'bundle exec ruby script/import_scripts/vbulletin5.rb'

الآن البرنامج يعمل (لكنني أحصل على خطأ متعلق بـ vBulletin5 يجب أن أحله لاحقاً)