إذا كان لديك منتدى Phorum قديم وتفكر في الترحيل إلى Discourse، فإن هذا الدليل مخصص لك. العملية مباشرة وسنستخدم سكربت استيراد Phorum الرسمي. لنبدأ.
على مستوى عالٍ، سنقوم بالخطوات التالية:
- إعداد بيئة التطوير المحلية.
- تصدير قاعدة البيانات من بيئة الإنتاج.
- استيراد قاعدة بيانات الإنتاج إلى نسخة محلية من Discourse.
- تشغيل سكربت استيراد Phorum.
ما الذي يمكن ترحيله
- التصنيفات
- كل المنتديات والمجلدات =\u003e التصنيف الجذري
- المواضيع والمشاركات
- المستخدمين (مع السمات التالية)
- حالة الحظر
- اسم المستخدم
- الاسم الحقيقي =\u003e الاسم
- البريد الإلكتروني
- حالة المسؤول
- تاريخ الإضافة
- آخر نشاط
إعداد بيئة التطوير المحلية
اتبع إحدى هذه الأدلة لتثبيت Discourse نفسه، واستشر هذا الدليل إذا واجهت أي مشاكل.
قم بتثبيت خادم قاعدة بيانات MySQL؛
أوبونتو 18.04:
$ sudo apt update
$ sudo apt install mysql-server -y
بعد الانتهاء من تثبيت MySQL، تحقق من حالته:
$ systemctl status mysql.service
إذا لم يكن قيد التشغيل، قم بتشغيل الأمر التالي:
$ sudo systemctl start mysql
ماك أو إس:
$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' \u003e\u003e ~/.bash_profile
$ source ~/.bash_profile
تحقق من حالة الخدمات:
$ brew services list
يجب أن ترى شيئًا مثل هذا:
...
mysql@5.7 started
...
وإلا، قم بتشغيل الأمر التالي وتحقق مرة أخرى:
$ brew services start mysql@5.7
لـ ويندوز، يمكنك اتباع دليل التثبيت الرسمي.
ستكون هذه البيئة هي خادم Discourse الخاص بنا.
تصدير قاعدة البيانات من بيئة الإنتاج:
قم بتصدير قاعدة بيانات الإنتاج (من خادم Phorum الإنتاجي):
$ mysqldump -u USER_NAME -p DATABASE_NAME \u003e phorum_dump.sql
انسخ ملف تصدير قاعدة البيانات إلى خادم Discourse.
استخدم
scpأوrsyncلنسخ قاعدة البيانات. وبالطبع، يمكنك ضغطها باستخدام gzip أولاً.
استيراد قاعدة بيانات الإنتاج إلى خادم Discourse
على خادم Discourse، قم بإنشاء قاعدة بيانات:
$ mysql -u root
إذا كان لمستخدم قاعدة البيانات كلمة مرور، فيجب عليك استخدام:
mysql -u root -pثم اكتب كلمة المرور.
mysql\u003e CREATE DATABASE phorum;
تأكد من إنشاء قاعدة البيانات:
mysql\u003e SHOW DATABASES;
يجب أن ترى شيئًا مثل هذا:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| phorum |
| sys |
+--------------------+
5 rows in set (0.04 sec)
هذه قاعدة بيانات فارغة. خطوتنا التالية هي استيراد قاعدة بيانات الإنتاج إليها.
$ mysql -u root phorum \u003c phorum_dump.sql
بينما نحن هنا، دعنا نحصل على بادئة الجداول. سنحتاج إليها لاحقًا:
$ mysql -u root
mysql\u003e USE phorum;
mysql\u003e SHOW TABLES;
سترى شيئًا مثل هذا:
+---------------------------+
| Tables_in_phorum |
+---------------------------+
| pw_banlists |
| pw_files |
| pw_forum_group_xref |
| pw_forums |
| pw_groups |
| pw_messages |
| pw_messages_edittrack |
| pw_pm_buddies |
| pw_pm_folders |
| pw_pm_messages |
| pw_pm_xref |
| pw_search |
| pw_settings |
| pw_subscribers |
| pw_user_custom_fields |
| pw_user_group_xref |
| pw_user_newflags |
| pw_user_permissions |
| pw_users |
+---------------------------+
19 rows in set (0.00 sec)
من المخرجات أعلاه، يمكنك رؤية أن البادئة هي pw_.
تشغيل سكربت استيراد Phorum
أولاً، قم بتثبيت تبعيات المستورد:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" \u003e\u003e Gemfile
$ bundle install
الآن دعنا نهيئ السكربت ليتوافق مع متطلباتنا. في مثالنا، سيكون ذلك كالتالي:
PHORUM_DB = "phorum"
TABLE_PREFIX = "pw_"
BATCH_SIZE = 1000
# ...
host: "localhost",
username: "root",
password: "", # قم بتغيير هذا إذا كان لديك كلمة مرور لقاعدة بيانات MySQL
database: PHORUM_DB
إذا كنت تريد إنشاء إعادة توجيه URL، فيجب عليك إلغاء تعليق ما يلي:
# categories.each do |category|
# Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
# end
#...
# results.each do |post|
# if post['parent_id'] == 0
# topic = topic_lookup_from_imported_post_id(post['id'].to_i)
# Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
# end
# end
سيكون الأمر على النحو التالي:
categories.each do |category|
Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
end
#...
results.each do |post|
if post['parent_id'] == 0
topic = topic_lookup_from_imported_post_id(post['id'].to_i)
Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
end
end
قم بتشغيل المستورد مع نسخة نظيفة من Discourse:
bundle exec rake db:drop db:create db:migrate
bundle exec ruby script/import_scripts/phorum.rb
سيتصل المستورد بخادم MySQL وينقل قاعدة بيانات Phorum لدينا إلى قاعدة بيانات Discourse.
ابدأ خادم Discourse بعد انتهاء المستورد من الاستيراد:
$ bundle exec rails server
ابدأ Sidekiq لمعالجة البيانات المرحلة:
$ bundle exec sidekiq
يمكنك مراقبة تقدم Sidekiq في
http://localhost:3000/sidekiq/queues.
قم بإعداد خادم Discourse الإنتاجي الخاص بك باتباع هذا الدليل.
قم بعمل نسخة احتياطية لقاعدة بيانات Discourse وقم برفعها إلى خادم Discourse الإنتاجي الخاص بك باتباع هذا الدليل.
تم :tada