ترحيل منتدى myBB إلى Discourse باستخدام Kubuntu في جهاز افتراضي

بعد قضاء ساعات طويلة جدًا، اعتقدت أنني اقتربت ولكن بعد ذلك…

$ bundle exec ruby script/import_scripts/mybb.rb 
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating users
script/import_scripts/mybb.rb:96:in `block (3 levels) in import_users': undefined method `exists?' for File:Class (NoMethodError)

                  @uploader.create_avatar(newuser, filename) if File.exists?(filename)
                                                                    ^^^^^^^
Did you mean?  exist?

لا يزال الأمر غير ناجح :frowning:

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

إذا فهمت جيدًا، فقد تم إهمال الطريقة ثم إزالتها من الإصدارات الحالية من Ruby:

يجب تحديث برنامج الاستيراد ليعكس هذا التغيير.


ربما حاول استبدال exists بـ exist بدون “s” هنا:

:slight_smile:

توثيق Ruby: https://ruby-doc.org/3.2.2/File.html#method-c-exist-3F

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

نعم - لقد تم إهماله منذ زمن طويل قبل ذلك. سأحاول البحث عن الحالات ذات الصلة وتغييرها ولكن أحتاج إلى أخذ قسط من الراحة من هذا التمرين الطويل وغير المجزي إلى حد كبير حتى الآن :wink:

حسناً…

$ bundle exec ruby script/import_scripts/mybb.rb
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': No setting named 'email_domains_blacklist' exists (Discourse::InvalidParameters)

يمكنك العثور على الاسم الجديد في إعدادات الموقع. أعتقد أنه email_domains_blocklist

شكرا لك.

$ grep -R email_domains_blocklist ./\n```
لا يُرجع شيئًا

$ grep -R email_domains_blacklist ./\n./script/import_scripts/base.rb: email_domains_blacklist: ‘’,\n./app/models/site_setting.rb: email_domains_blacklist: "blocked_email_domains",\n```
يُرجع كما هو أعلاه. مما يعني أنه على الأرجح blocked_email_domains. من ناحية أخرى، لاحظت أنه في المحاولات السابقة قمت باستبدال script/import_scripts/base.rb الأصلي بواحد يعتمد على الملخص المرتبط أعلاه بواسطة @Paul_King:

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

إعجابَين (2)

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

0. تثبيت بيئة تطوير Discourse

باتباع هذا المنشور وتشغيل هذا السكربت المرتبط في المنشور باستخدام

`bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)`

كما هو موضح هناك بالإضافة إلى استنساخ المصادر

git clone https://github.com/discourse/discourse.git ~/discourse

1. إعداد قاعدة بيانات MySQL

احصل على نسخة احتياطية من قاعدة بيانات mybb الأصلية كما هو موضح في أعلى الموضوع:

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql

وانسخها/انقلها إلى بيئة التطوير التي تم إعدادها حديثًا.

تثبيت خادم MySQL

$ sudo apt-get install mysql-server

تم تغيير المصادقة لـ mysql في الإصدارات الأحدث. يجب أن تكون الجذر على المضيف إذا كنت تريد أن تكون الجذر في mysql هذه الأيام، لذا

$ sudo mysql

بدلاً من

$mysql -u root

بالطبع، يجب أن تكون “مديرًا” (مسؤولًا) أولاً

$ sudo mysql
mysql> CREATE DATABASE mybb;
mysql> SHOW DATABASES;
mysql> CREATE USER 'nonrootuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON mybb.* TO 'nonrootuser'@'localhost';
mysql> quit
$ mysql -unonrootuser -ppassword mybb < mybb_dump.sql

<هنا تحصل على تحذير بشأن تقديم كلمة المرور في سطر الأوامر ليس شيئًا ذكيًا لفعله>

$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;

<هنا تحقق مما إذا كانت جميع الجداول موجودة - انظر المنشور الأصلي>

mysql> quit

2. تثبيت Ruby gems

التحقق من Gemfile في المصادر الحالية يكشف أن

$ echo "gem 'mysql2', require: false" >> Gemfile

ليس ضروريًا حقًا. يكفي تعيين متغير البيئة IMPORT إلى 1.
ما هو مطلوب هو ملفات التطوير لعملاء MySQL، وهذا ما يتعلق به السطر الأول أدناه

$ sudo apt-get install libmysqlclient-dev
$ cd ~/discourse
$ IMPORT=1 bundle install

2. إعداد Discourse (قاعدة بيانات PostgreSQL)

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ export DB_PW="password"
$ export DB_USER="nonrootuser"

3. تنفيذ الاستيراد الفعلي

السطر التالي يصلح استدعاء طريقة مهملة منذ فترة طويلة وتمت إزالتها بالفعل حاليًا في سكربت الاستيراد mybb.rb، والذي لا يزال موجودًا في وقت كتابة هذا التقرير ولن يغير شيئًا إذا تم إصلاحه بالفعل

$ sed -i.original 's/File.exists?/File.exist?/' script/import_scripts/mybb.rb

الآن تحقق مما إذا كان Redis لا يزال قيد التشغيل. سكربت تثبيت Rails يبدأ تشغيله ولكنه لا يمكّنه كخدمة دائمة لذلك لا يبقى بعد إعادة التشغيل، الأعطال، أي شيء، إلخ.

$ ps -aux |grep redis
silverdr    2808  0.3  0.3  89972 14512 ?        Ssl  05:25   2:04 redis-server *:6379
[…]

إذا لم تر شيئًا مثل السطر أعلاه، قم بتشغيل

$ redis-server --daemonize yes

وهو نفس الأمر الذي استخدمه سكربت تثبيت Rails أعلاه في المرة الأولى عند التثبيت.

أخيرًا :pray: و

$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb

إذا لم يتوقف السكربت في هذا الوقت مع YAE (خطأ آخر) فقد حان الوقت لفتح تلك الزجاجة :champagne:

بعض الأشياء المتبقية

  • حسنًا - الجزء المفقود الواضح الوحيد هو كلمات مرور المستخدمين. على ما يبدو، على الرغم من أن كلا التطبيقين يخزنان التجزئة والملح، بالنظر إلى طول هذه التجزئات، فإن “mybb” يستخدم خوارزمية تجزئة أقدم. لذلك، هذا مفهوم وليس مشكلة كبيرة. يجب أن يكون الجميع قادرين على إعادة تعيين كلمة المرور الخاصة بهم في المرة الأولى.
  • بعض محتوى bbcode لا يتم تحويله. لدي على سبيل المثال مشكلة مع كتل التعليمات البرمجية، والتي تحتوي على بعض العلامات حولها تضبط خط Courier أحادي المسافة وما إلى ذلك. لم يعد لدي القدرة على محاولة أتمتة هذا الأمر بشكل أكبر. إذا تمكنت من فعل شيء حيال ذلك، فيرجى إخبارنا / إخبارنا هنا! :man_bowing:
إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.