ترحيل منتدى FluxBB إلى Discourse

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

لقد اختبرت ملف هجرة السكربت هذا مع FluxBB v1.5.10 (وهي الإصدار الحالي حاليًا).

ما هي البيانات التي يمكن استيرادها؟

  • المستخدمين (بما في ذلك السيرة الذاتية والتوقيعات)
  • المجموعات
  • التصنيفات
    :warning: لن يتم استيراد الأذونات، وستكون جميع التصنيفات عامة. يجب تعيين الأذونات الصحيحة يدويًا بعد الاستيراد.
  • المواضيع (بما في ذلك حالة التثبيت/التثبيت)
  • المنشورات
  • المستخدمين المعلقين

قبل بدء الهجرة، قم بإعداد بيئة تطوير على جهازك (أو داخل آلة افتراضية). راجع دليل التثبيت لـ OS X أو Ubuntu للتطوير.

يتطلب Discourse Ruby 3.4+. للتحقق من إصدار Ruby الخاص بك، أدخل الأمر أدناه:

ruby -v

MySQL

الآن نحتاج إلى مكتبة mysql2 لـ Ruby للاتصال بقاعدة بيانات FluxBB القديمة. قم بتشغيل الأوامر التالية لتثبيت اعتماد libmysqlclient-dev ومكتبة mysql2.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libmysqlclient-dev
gem install mysql2

(اختياري) استيراد نسخة احتياطية من MySQL إلى localhost

للتثبيت وتثبيت عميل MySQL واستيراد ملف نسخة احتياطية من MySQL (.sql) إلى جهاز التطوير الخاص بك، اتبع التعليمات أدناه:

sudo apt-get install mysql-server mysql-client

قم بإنشاء مستخدم MySQL والصلاحيات والجداول:

mysql -u root -p mysql
mysql> CREATE USER 'fluxbb'@'localhost' IDENTIFIED BY 'fluxbb';
Query OK, 0 rows affected (0.00 sec)
.
mysql> CREATE DATABASE fluxbb;
Query OK, 1 row affected (0.01 sec)
.
mysql> GRANT ALL PRIVILEGES ON fluxbb.* TO 'fluxbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
.
mysql> exit

قم باستيراد ملف نسخة احتياطية من قاعدة بيانات FluxBB:

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode إلى Markdown

يتعامل سكربت الاستيراد تلقائيًا مع تحويل BBCode إلى Markdown. لا توجد مكتبات إضافية مطلوبة لهذا الغرض.


بعد تثبيت mysql2، انتقل إلى مسار تثبيت Discourse وافتح ملف Gemfile للتحرير.

cd ~/discourse
sudo nano Gemfile

الآن قم بإدراج السطر أدناه في نهاية الملف لإضافة مكتبة mysql2 إلى Discourse.

gem 'mysql2'

قبل تشغيل سكربت الاستيراد، الصق الأسطر التالية واحدة تلو الأخرى في shell الخاص بك. (استخدم مفاتيح الأسهم لتعديل القيم)

export FLUXBB_HOST="localhost"
export FLUXBB_DB="fluxbb"
export FLUXBB_USER="root"
export FLUXBB_PW=""
export FLUXBB_PREFIX=""

الآن حان وقت تشغيل سكربت الاستيراد. قم بتشغيل الأمر أدناه لبدء الهجرة.

RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb

انتظر حتى ينتهي الاستيراد. يمكنك إعادة تشغيله إذا تباطأ إلى حد كبير.

بعد الانتهاء، تهانينا! تم نقل قاعدة بياناتك بنجاح من FluxBB إلى Discourse :thumbsup:

ابدأ مثيل Discourse الخاص بك:

bundle exec rails server

ابدأ Sidekiq ودعه يقوم بعمله:

bundle exec sidekiq -q critical,4 -q default,2 -q low

اعتمادًا على حجم منتداك، قد يستغرق هذا وقتًا طويلاً. يمكنك مراقبة التقدم في http://localhost:3000/sidekiq.

الآن قم بإنشاء نسخة احتياطية من صفحة المسؤول /admin/backups واستوردها في موقع Discourse المباشر الخاص بك.

12 إعجابًا
discourse@app-deb10-app:/var/www/discourse$ FLUXBB_HOST="localhost" FLUXBB_DB="flux" FLUXBB_USER="fluxbb" FLUXBB_PW="fluxbb" RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb 
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating groups
Traceback (most recent call last):
	9: from script/import_scripts/fluxbb.rb:262:in `<main>'
	8: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
	7: from script/import_scripts/fluxbb.rb:40:in `execute'
	6: from script/import_scripts/fluxbb.rb:50:in `import_groups'
	5: from script/import_scripts/fluxbb.rb:258:in `mysql_query'
	4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/db/mysql2/alias_method.rb:22:in `query'
	3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query': Table 'flux.groups' doesn't exist (Mysql2::Error)

Looks like the tables don’t exist in the mySQL database. I’d check by logging in to the mySQL DB first and seeing what tables are there. You might need to modify the script to get it to work.

إعجابَين (2)

https://creio.github.io/fluxbb-discourse/

Here, everything step-by-step.

هل هذا المستورد معطل في إصدارات Discourse الحديثة؟

أقوم بتشغيل نسخة Discourse مثبتة باستخدام discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (المعروف أيضًا باسم “التثبيتات المدعومة رسميًا فقط لـ Discourse”).

لقد قمت بإعداد قاعدة بيانات MariaDB داخل حاوية Docker، واستوردت تفريغ المنتدى الخاص بي هناك، وما إلى ذلك، لأن أي نهج آخر يصعب إعداده. كل ما فعلته كان داخل shell cd /var/discourse/ & ./launcher enter app.

تشغيل bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md يفشل مع:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client
': We could not find your database: discourse. Which can be found in the database configuration file located at config/database.yml. (ActiveRecord::NoDatabaseError)

تشغيل sudo -u postgres psql discourse في نفس shell يسجلني في قاعدة بيانات “discourse” بشكل جيد.

عذرًا على الافتراض السلبي، كان الأمر بسيطًا:

يجب تشغيل البرنامج النصي باستخدام المستخدم discourse، وليس بصلاحيات المستخدم الجذر في الحاوية وهو ما فعلته.

بصرف النظر عن عدم تحويل بعض أكواد BB، يبدو أن هذا قد نجح بشكل جيد. شكراً لك!

Tests, fixes, and a small (optional) feature to allow a FluxBB config to work by harry-wood · Pull Request #6 · nlalonde/ruby-bbcode-to-md · GitHub يبدو أنه طلب سحب (PR) جيد مع إصلاحات لتحويل أكواد BB.

تحذير هام:

يتم تجاهل الأذونات بواسطة هذا المستورد.

سيتم نشر جميع منتدياتك كمنتديات عامة.

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

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

يمكنك تعديل أذونات الفئات يدويًا بعد الاستيراد. من المحتمل ألا تكون مهمة كبيرة لإصلاحها يدويًا.

من المحتمل أن يكون إضافة دعم لاستيراد الأذونات مهمة أكبر من القيام بذلك يدويًا.

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

شكرا للإبلاغ عن هذا، لقد أضفت تحذيراً حول هذا في الدليل.

إعجابَين (2)