Hey guys so after trying for a week or so I decided to import the database on docker app which I hoped it will succeed without any issues. TBH I got some issues at first but it turned to be all easy to solve.
Now I would recommend doing this only once before you deploy your production site, after importing everything take a Discourse backup, wipe everything out and install new Discourse instance then restore the imported db.
Ok let’s begin:
First lets backup your old database from your old server, sign in to your Discourse server then:
ssh USER@XENFORO_SERVER_IP # Use -p argument to specify custom port
mysqldump -u XENFORO_DATABASE_USER -p XENFORO_DATABASE_NAME > xen_db.sql
exit
After installing Discourse start the app:
./launcher start app
Now lets pull the database backup from xenforo server:
# bundle install --no-deployment
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.
Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Could not find gem 'mysql2' in any of the gem sources listed in your Gemfile.
root@discourse-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
No connection to db, unable to retrieve site settings! (normal when running db:create)
Traceback (most recent call last):
31: from script/import_scripts/xenforo.rb:3:in `<main>'
30: from script/import_scripts/xenforo.rb:3:in `require'
29: from /var/www/discourse/script/import_scripts/base.rb:20:in `<top (required)>'
28: from /var/www/discourse/script/import_scripts/base.rb:544:in `<class:Base>'
27: from /var/www/discourse/lib/discourse.rb:411:in `system_user'
26: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `find_by'
25: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `all?'
24: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `each'
23: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/core.rb:196:in `block in find_by'
22: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:336:in `columns_hash'
21: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:456:in `load_schema'
20: from /usr/local/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
19: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:459:in `block in load_schema'
18: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/attribute_decorators.rb:51:in `load_schema!'
17: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/attributes.rb:234:in `load_schema!'
16: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/model_schema.rb:466:in `load_schema!'
15: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_handling.rb:90:in `connection'
14: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
13: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:1008:in `retrieve_connection'
12: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:380:in `connection'
11: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:521:in `checkout'
10: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:793:in `acquire_connection'
9: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:832:in `try_to_checkout_new_connection'
8: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `checkout_new_connection'
7: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:809:in `new_connection'
6: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `postgresql_connection'
5: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `new'
4: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:215:in `initialize'
3: from /usr/local/lib/ruby/gems/2.5.0/gems/activerecord-5.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:684:in `connect'
2: from /usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `connect'
1: from /usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `new'
/usr/local/lib/ruby/gems/2.5.0/gems/pg-1.0.0/lib/pg.rb:56:in `initialize': FATAL: Peer authentication failed for user "discourse" (PG::ConnectionBad)
سأطرح عليكم سؤالاً: لماذا انتقلتم من XenForo إلى Discourse؟ لقد بدأت منتدى قبل أسبوع فقط، وقد شاهدت مواقع تعمل بـ XenForo وأبهرتني إضافاتها بما في ذلك نظام النقاط. أود فقط معرفة السلبيات أو الأسباب التي دفعتكم للانتقال. شكراً لكم.
لقد انتهيت للتو من عملية نقل من Xenforo إلى Discourse لموقع يحتوي على مليون منشور على خادم Digital Ocean. إليك ما نجح معي خطوة بخطوة (مشابه جدًا لما قمت به مؤخرًا في موقع vBulletin آخر).
يُوصى بحد أدنى من 4 وحدات معالجة مركزية افتراضية وذاكرة عشوائية سعتها 8 جيجابايت للاستيراد.
شكرًا للجميع في هذا الموضوع على مساعدتي في تجاوز عمليات النقل هذه، لقد كانت أيامًا ممتعة حقًا بالقراءة وإعادة القراءة..
1 - تثبيت نسخة Discourse من Digital Ocean بضغطة زر واحدة
2 - إكمال تثبيت Discourse عبر SSH باتباع التعليمات
افتح وحدة تحكم SSH
root
(كلمة مرور الجذر الخاصة بك)
(إدخال)
(نطاقك).com
الخ
3 - تسجيل الدخول إلى SFTP
sftp root@XXX.XXX.XX.XX
y (إذا طُلب منك التأكيد)
yes
(كلمة مرور الجذر الخاصة بك)
put db.sql /var/discourse/shared/standalone/db.sql
4 - تسجيل الدخول إلى الموقع لإعداد حساب المسؤول
5 - تسجيل الدخول إلى SSH - بدء العملية
ssh root@XXX.XXX.XX.XX
cd /var/discourse
./launcher start app
docker exec -it app bash
sudo apt-get update
sudo apt-get upgrade
y
6 - تثبيت MariaDB (بديل لـ mysql)
apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev
y
7 - إعداد قاعدة بيانات MySQL
service mysql start
mysql -u root -p
كلمة المرور
create database import_db;
exit;
8 - استيراد الملف المنسوخ → نقل قاعدة بيانات MySQL
mysql -u root -p import_db < /shared/db.sql
كلمة المرور
9 - ملف GEM
echo "gem 'mysql2'" >>Gemfile
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'
(تجاهل النص الأحمر الناتج)
10 - تكوين سكريبت التثبيت
vi /var/www/discourse/script/import_scripts/xenforo.rb
---قم بإجراء التعديلات المطلوبة على ملف النص مثل اسم قاعدة البيانات/كلمة المرور/البادئة، إلخ---
(esc)
:wq
11 - تكوين Bundle
bundle config set path 'vendor/bundle'
bundle config set without 'development:test'
bundle config unset deployment
su discourse -c 'bundle install'
12 - إعدادات MySQL (قد يكون من الممكن القيام بذلك مع الخطوة السابقة)
mysql --version
sudo mysql -u root -p
كلمة المرور
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit
13 - سكريبت التثبيت
su discourse -c 'bundle exec ruby script/import_scripts/xenforo.rb'
أنا في عملية محاولة إكمال هذا الترحيل، لكنه يبدو أنه يرمي خطأً مع المرفقات.
RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
جاري تحميل المجموعات الموجودة...
جاري تحميل المستخدمين الموجودين...
جاري تحميل التصنيفات الموجودة...
جاري تحميل المنشورات الموجودة...
جاري تحميل المواضيع الموجودة...
إنشاء المستخدمين
تجاوز 407 مستخدمًا تم استيراده مسبقًا
جاري استيراد التصنيفات...
12 / 12 (100.0%) [344731 عنصر/دقيقة]
إنشاء المواضيع والمنشورات
2 / 4554 ( 0.0%) [17724 عنصر/دقيقة] تتبع (آخر استدعاء):
18: من script/import_scripts/xenforo.rb:396:in `<main>'
17: من /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
16: من script/import_scripts/xenforo.rb:32:in `execute'
15: من script/import_scripts/xenforo.rb:174:in `import_posts'
14: من /var/www/discourse/script/import_scripts/base.rb:866:in `batches'
13: من /var/www/discourse/script/import_scripts/base.rb:866:in `loop'
12: من /var/www/discourse/script/import_scripts/base.rb:867:in `block in batches'
11: من script/import_scripts/xenforo.rb:180:in `block in import_posts'
10: من /var/www/discourse/script/import_scripts/base.rb:508:in `create_posts'
9: من /var/www/discourse/script/import_scripts/base.rb:508:in `each'
8: من /var/www/discourse/script/import_scripts/base.rb:509:in `block in create_posts'
7: من script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
6: من script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
5: من script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
4: من /usr/local/lib/ruby/2.7.0/set.rb:328:in `each'
3: من /usr/local/lib/ruby/2.7.0/set.rb:328:in `each_key'
2: من script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
1: من /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.3.3/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': لا يمكن تعديل سلسلة مجمدة: "\\t\\tSELECT a.attachment_id, a.data_id, d.fil\n\\t\\tFROM xf_attachment AS a\\n\\t\\tINNER JOIN xf_attachment_data d ON a.data_id = d.data_id\\n\\t\\tWHERE attachment_id = 13\\n" (FrozenError)
هل لدى أي شخص أي أفكار حول ما يمكن أن يحدث هنا؟ ما هو "FrozenError"؟