نقل منتدى vBulletin 4 إلى Discourse

شكرًا لك على المعلومات القيمة! :+1:t6:

لدي سؤال آخر يتعلق باستعلام SQL الذي يختار مستخدمين vBulletin.

عندما قمت باستيراد منتدى phpbb القديم الخاص بي إلى Discourse قبل 3 سنوات، كان هناك حوالي 20000 مستخدم. من الواضح أن معظم هذه الحسابات لم تكن مستخدمة. خلال هذه السنوات الثلاث، قام Discourse بتنظيف تلقائي للمستخدمين غير النشطين، وأصبح لدينا الآن رقم أكثر دقة وهو 3000 عضو.

عندما استوردت 180000 مستخدم من vBulletin وطلبت من Discourse القيام بعملية التنظيف بشكل نشط، تبقيت مع 27000 مستخدم، وهو رقم يبدو معقولاً.

في vBulletin الخاص بي، نظرًا لأن:

  1. جميع الرسائل التي نشرها المستخدمون على ملفات المستخدمين الآخرين تم استيرادها إلى Discourse في مواضيع غير مصنفة وبدون عنوان، مما يضيف ضوضاء غير مفيدة فقط، و
  2. الغالبية العظمى من المستخدمين الذين نشروا فقط على ملفات المستخدمين الآخرين يبدو أنهم مزورون،
    أود إجراء عملية التنظيف أثناء الاستيراد وليس بعد ذلك.

لا أفهم تمامًا قاعدة بيانات vBulletin، التي تبدو مربكة قليلاً بسبب نظام العقد فيها، لكنني أود استيراد المستخدمين فقط الذين نشروا موضوعًا واحدًا على الأقل أو ردًا واحدًا.
يبدو لي أن المواضيع والردود تملأ حقل lastpostid في جدول مستخدمين vBulletin، لكن منشورات الملف الشخصي العامة لا تفعل ذلك.

نعم، أنا أعتزم تعديل الاستعلام التالي:

  SELECT u.userid, u.username, u.homepage, u.usertitle, u.usergroupid, u.joindate, u.email
    CASE WHEN u.scheme='blowfish:10' THEN token
         WHEN u.scheme='legacy' THEN REPLACE(token, ' ', ':')
    END AS password,
    IF(ug.title = 'Administrators', 1, 0) AS admin
    FROM #{DB_PREFIX}user u
    LEFT JOIN #{DB_PREFIX}usergroup ug ON ug.usergroupid = u.usergroupid
ORDER BY userid
   LIMIT #{BATCH_SIZE}
  OFFSET #{offset}

إلى:

  SELECT u.userid, u.username, u.homepage, u.usertitle, u.usergroupid, u.joindate, u.email, u.lastpost
    CASE WHEN u.scheme='blowfish:10' THEN token
         WHEN u.scheme='legacy' THEN REPLACE(token, ' ', ':')
    END AS password,
    IF(ug.title = 'Administrators', 1, 0) AS admin
    FROM #{DB_PREFIX}user u
    LEFT JOIN #{DB_PREFIX}usergroup ug ON ug.usergroupid = u.usergroupid
    WHERE u.lastpost > 0
ORDER BY userid
   LIMIT #{BATCH_SIZE}
  OFFSET #{offset}

أضفت ببساطة WHERE u.lastpost > 0.

العد باستخدام هذا الاستعلام يعطيني 25000 مستخدم، مقارنة بـ 27000 مستخدم نشط في استيرادي السابق، بعد تنظيف Discourse ولكن لا يزال يحتوي على هذه المواضيع بدون عناوين (رسائل الملف الشخصي العامة السابقة). هذا يعني أن حوالي 2000 مستخدم كانوا قد نشروا فقط على ملفات المستخدمين الآخرين، وهو رقم ليس غير معقول.

هل تعتقد أن تفكيري صحيح وأن إضافة WHERE u.lastpost > 0 ستقوم بتنظيف قاعدة المستخدمين الخاصة بي بشكل جيد دون أي تأثير ضار؟

يعتمد ذلك على مكان قاعدة بياناتك. إذا تم ترحيلها من phpBB إلى vBulletin أو إذا مرت بالعديد من تحديثات vBulletin، فقد يكون هذا الاستنتاج خاطئًا.

أفضل ما يمكنك فعله هو التحقق من استنتاجك بتشغيل استعلامات إضافية، مثل سرد جميع المشاركات التي أنشأها المستخدمون بدون lastpost.

أيضًا، إذا كان لديك أي إضافات مثل “الإعجابات” أو “التصويت”، فقد تقوم بحذف مستخدمين لا ينبغي حذفهم.

استراتيجيتي هي أن أكون حذرًا للغاية عند حذف أو استبعاد أي عناصر. التخزين رخيص الثمن.

4 إعجابات

شكرًا لك، سأفعل كما تقول، فأنا أفضل الحذر. :slight_smile:
سأترك لـ Discourse القيام بتنظيفه الخاص بمرور الوقت.

لقد كنت أضيف تعبيرات نمطية (regex) مخصصة لتنظيف المنشورات في سكريبت الترحيل الخاص بك منذ أيام لأن المنتدى قديم جدًا وتم ترحيله من phpBB قبل vBulletin، لذا كان لا بد من العناية بالكثير من الأمور، لكنني أعتقد وأتمنى أنني قريب من إنهاء الأمور.

لا أعرف vBulletin حقًا، لكن المنتدى الذي أعمل عليه كان يستخدم vBulletin 5.6، وبعض الصور الخارجية التي نشرت فيها كانت تستخدم هذا الصياغة في قاعدة بيانات vBulletin:
[IMG2=JSON]{"data-align":"none","data-size":"full","src":"https:\/\/forum.monocycle.info\/uploads\/default\/original\/2X\/3\/396192845ba93e7df2a6109a2608072efa21ee32.jpeg"}[/IMG2]
لست متأكدًا مما إذا كان هذا شيء “تم نسيانه” في سكريبتك، أو ما إذا كان مدير المنتدى يستخدم إضافة ما تولد هذه الوسوم img2.

على أي حال، قمت بإصلاحها باستخدام هذا الكود:

    raw = raw.gsub(/\[img2=json\].+?(http.+?).}\[\/img2\]/i) {"\n#{$1}\n"}

لكن لدي سؤال: هل سيعيد Discourse تشكيل المنشورات المستوردة تلقائيًا بمرور الوقت؟ وإذا كان الأمر كذلك، هل سيبدأ من أحدث المنشورات؟

إعجابَين (2)

مرحبًا مجددًا،
يحتوي منتداي على حوالي 1000 وسم، لكننا على الأرجح لن نستخدمها في Discourse. علاوة على ذلك، فإن هذه الوسوم قد تكون فوضوية حقًا. هل يمكنني ببساطة التعليق على هذا السطر في أداة الاستيراد:

    import_tags

أم قد يكون هناك ضرر جانبي؟

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

يمكنك وضعه في تعليق بأمان.

إعجابَين (2)

هل من الآمن عدم انتظار انتهاء سايديك من مهامه بعد استيراد شيء ما؟

لقد استوردت مستخدمينا وهذه هي الحالة الحالية لسايديك.

ماذا يحدث لهذه المهام إذا قمت بإنشاء نسخة احتياطية واستعادتها على منتدى الإنتاج؟

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

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

ستستمر في العمل… على مثيل الاستيراد.
لن يتم تضمينها في النسخة الاحتياطية أو نقلها إلى منتدى الإنتاج.

3 إعجابات

شكرًا لك! :+1:

بسبب بعض رسائل الخطأ التي ظهرت أثناء استعادة النسخ الاحتياطية (والتي لا تمنع اكتمال الاستعادة أو عمل المنتدى)، تساءلت عما إذا كان ذلك قد يكون بسبب عدم انتظار انتهاء مهمة Sidekiq.

بدأت عملية استيراد جديدة من vBulletin: قمت باستيراد المجموعات و30,000 مستخدم فقط على نسخة Discourse التجريبية الخاصة بي، وانتظرت بضع عشرات من الدقائق، ثم أنشأت نسخة احتياطية، واستعدت النسخة الاحتياطية على تثبيت يعتمد على Docker. نجحت عملية الاستعادة، لكن السجلات تظهر هذه الأخطاء:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "users" does not exist LINE 1: SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 ^ ) lib/a
10:03 مساءً
7
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "user_auth_tokens" does not exist LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...

هذه الأخطاء غير متسقة، وتختلف أخطاء العلاقات من نسخة احتياطية إلى أخرى. لا أستطيع تحديد مصدر هذه الأخطاء. :confused:

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

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

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

قد يكون ذلك بسبب حركة المرور العادية الواردة إلى خادمك، أو عملية Sidekiq لم يتم إيقافها مؤقتًا. في كلتا الحالتين، الأمر غير ضار. لو كنت مكانك، لتجاهلت تمامًا جميع أخطاء PG التي تحدث قبل اكتمال عملية الاستعادة بالكامل.

4 إعجابات

هذا مطمئن!

المشكلة هي أن الرسائل نفسها مخيفة بالنسبة لي، وهي مخيفة أيضًا لأن:

  1. تظهر في كل نسخة احتياطية (أو تقريبًا؟ :thinking:) قمت بإنشائها منذ بدء عملية الاستيراد، سواء استعدت النسخة في منتدى تطوير محلي أو في تثبيت Docker عبر الإنترنت.
  2. تمنع سجل الاستعادة (في واجهة نسخ Discourse الاحتياطية) من الاستمرار في الكتابة أثناء عملية الاستعادة: فتبقى عالقة عند “فك ضغط الأرشيف” (أو “إنشاء الدوال المفقودة في مخطط discourse_functions…” إذا كانت النسخة بدون ملفات مرفقة).
    يبدو أن هناك تعطلًا ما، لكن إذا انتظرت قليلًا، فسأتم تسجيل خروجي تلقائيًا بشكل صحيح، وعند تسجيل الدخول مجددًا، يبدو أن عملية الاستيراد نجحت رغم هذه الرسائل الخطأ.

بما أن المنتدى يعمل (باستثناء مشكلة تعديل التصنيفات التي تؤدي إلى خطأ 502 والتي وصفتها في موضوع آخر)، فأنا فقط خائف من أن يعمل المنتدى… حتى يتوقف فجأة بعد أسابيع أو أشهر أو سنوات لسبب لم أستطع اكتشافه مسبقًا، وهو ما لا أريد أن يحدث بالتأكيد، خاصة أنني أعمل على هذا الاستيراد يوميًا منذ شهر وما زال مستمرًا. :sweat_smile:

على أي حال، شكرًا لك على مساعدتك، فهي مُقدَّرة جدًا. أنا أضع الكثير من الجهد في هذا العمل غير المدفوع لاستيراد بيانات مجتمع كبير، والحصول على ردود من الناس على أسئلتي يُشعرني دائمًا بالراحة.

إعجابَين (2)

أولاً، شكرًا لك على نشر هذا. لقد جربت استيراد vBulletin 3.7.x للتو. اتبعت جميع الخطوات، ولكن عند تشغيل سكريبت الاستيراد، يقول إنه لا يمكنه الاتصال رغم أنني أستطيع الاتصال. هل لديك أي أفكار؟

root@uat-app:/var/www/discourse# export DB_NAME="vb4"
root@uat-app:/var/www/discourse# export DB_USER="root"
root@uat-app:/var/www/discourse# export DB_PW="1234"
root@uat-app:/var/www/discourse# export TABLE_PREFIX="vbulletin"
root@uat-app:/var/www/discourse# export ATTACHMENT_DIR='/shared/vbulletin'
root@uat-app:/var/www/discourse# export TIMEZONE="America/Vancouver"
root@uat-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:1234@localhost wants vb4
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: 1234
database: vb4

Edit the script or set these environment variables:

export DB_HOST="localhost"
export DB_NAME="vbulletin"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="vb_"
export ATTACHMENT_DIR '/path/to/your/attachment/folder'

Exiting.

فيما يلي يمكنك رؤية أنني قادر على تسجيل الدخول إلى قاعدة البيانات باستخدام نفس بيانات الاعتماد، وقد تحققت من اسم قاعدة البيانات وبدء الجدول.

root@uat-app:/var/www/discourse# mysql -uroot -p1234 -hlocalhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 70
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use vb4;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [vb4]> select * from information_schema.tables where table_schema = 'vb4' and table_name = 'vbulletinpost'
    -> ;
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME    | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME         | UPDATE_TIME         | CHECK_TIME          | TABLE_COLLATION   | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT | MAX_INDEX_LENGTH   | TEMPORARY |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
| def           | vb4          | vbulletinpost | BASE TABLE | MyISAM |      10 | Dynamic    |    1037509 |            356 |   370191960 | 281474976710655 |     53087232 |         0 |        1046506 | 2020-11-14 14:27:01 | 2020-11-14 14:27:28 | 2020-11-14 14:27:32 | latin1_swedish_ci |     NULL |                |               | 288230376151710720 | N         |
+---------------+--------------+---------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-------------------+----------+----------------+---------------+--------------------+-----------+
1 row in set (0.001 sec)

MariaDB [vb4]>

أيضًا، قمت بتصدير المتصفح إلى /admincp/avatar.php?do=storage وتصدير الصور الرمزية إلى ثلاث مجلدات مختلفة كما يلي.

/shared/vbulletin/signaturepics/
/shared/vbulletin/customprofilepics/
/shared/vbulletin/customavatars/

هل يجب أن أحدد المجلد الأب مثل هذا؟ أم يجب أن آخذ محتوى المجلدات الثلاثة وأضعها في مجلد واحد؟

export ATTACHMENT_DIR='/shared/vbulletin'

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

تخميني الوحيد هو أن كلمة المرور الخاصة بك قد تحتوي على أحرف غريبة؟

إعجابَين (2)

في الواقع، إنه مجرد أحرف أبجدية ورقمية. على أي حال، جربت مرة أخرى وأكّد أن الأمر لا يعمل حتى أقوم بتعيين كلمة المرور صراحةً. لاحظت أيضًا أن التعليمات تحتاج إلى تحديث، لذا سأضع هنا ما يعمل بالنسبة لي.

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

يجب تحديث التعليمات. إليك ما ينجح معي اعتبارًا من نوفمبر 2020. لاحظ أنه من الأفضل بالفعل تشغيل عملية الاستيراد هذه باستخدام أداة screen لأن الاستيراد قد يستغرق ساعات، واستخدام nohup قد لا يكون مفيدًا لأن سكريبت الاستيراد سيحدث باستمرار عدد العناصر المستوردة، مما قد يؤدي إلى أن يصبح ملف stdout كبيرًا جدًا.

تثبيت قاعدة البيانات لاستضافة بيانات vBulletin

تنزيل أحدث الحزم

لاحظ أن MySQL لم تعد متاحة إلا إذا تمت إضافة مستودع Oracle MySQL صراحةً إلى قائمة المستودعات. وقد حلت MariaDB محل MySQL.

root@uat-app:~# apt-get update
root@uat-app:~# apt-get install libmariadb-dev
root@uat-app:~# apt-get install default-mysql-server

بدء قاعدة البيانات

root@uat-app:~# service mysql status
[info] MariaDB is stopped..
root@uat-app:~#
root@uat-app:~# service mysql start
[ ok ] Starting MariaDB database server: mysqld.
root@uat-app:~# service mysql status
[info] /usr/bin/mysqladmin Ver 9.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version 10.3.25-MariaDB-0+deb10u1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 4 sec

Threads: 7 Questions: 461 Slow queries: 0 Opens: 177 Flush tables: 1 Open tables: 31 Queries per second avg: 115.250.

تثبيت مكتبات Gems للاتصال بقاعدة البيانات

يوضح ما يلي أن أحدث إصدار من ‘bundle’ لا يتوافق مع بعض الأعلام في التعليمات الأصلية، وهناك حاجة لإلغاء تعيين وضع ‘deployment’.

root@uat-app:~# echo "gem 'mysql2', require: false" >> /var/www/discourse/Gemfile

root@uat-app:~# echo "gem 'php_serialize', require: false" >> /var/www/discourse/Gemfile

root@uat-app:~# cd /var/www/discourse
root@uat-app:/var/www/discourse# su discourse -c 'bundle install --no-deployment --without test --without development --path vendor/bundle'
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag
[DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set without 'development'`, and stop using this flag
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the /var/www/discourse/Gemfile freeze by running `bundle config unset deployment`.

The dependencies in your gemfile changed

You have added to the Gemfile:
* mysql2
* php_serialize

تحديث التكوين وإعادة تشغيل التثبيت

التحقق عبر سطر الأوامر (CLI)

أكد التحقق من التكوين أنه مضبوط على وضع ‘deployment’.

root@uat-app:/var/www/discourse# bundle config list
Settings are listed in order of priority. The top value will be used.
deployment
Set for your local app (/var/www/discourse/.bundle/config): true

jobs
Set for your local app (/var/www/discourse/.bundle/config): 4

retry
Set for your local app (/var/www/discourse/.bundle/config): 3

path
Set for your local app (/var/www/discourse/.bundle/config): "vendor/bundle"

without
Set for your local app (/var/www/discourse/.bundle/config): [:development, :test]

التحقق عبر فحص ملف التكوين

يوضح ما يلي إجراء نفس الفحص عن طريق فحص ملف التكوين.

root@uat-app:/var/www/discourse# cat /var/www/discourse/.bundle/config
---
BUNDLE_DEPLOYMENT: "true"
BUNDLE_JOBS: "4"
BUNDLE_RETRY: "3"
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITHOUT: "development:test"

تحديث التكوين

root@uat-app:/var/www/discourse# bundle config set path 'vendor/bundle'
Your application has set path to "vendor/bundle". This will override the global value you are currently setting
root@uat-app:/var/www/discourse# bundle config set without 'development:test'
Your application has set without to "development:test". This will override the global value you are currently setting
root@uat-app:/var/www/discourse# bundle config unset deployment

التحقق من التكوين مرة أخرى

root@uat-app:/var/www/discourse# bundle config list
Settings are listed in order of priority. The top value will be used.
path
Set for your local app (/var/www/discourse/.bundle/config): "vendor/bundle"
Set for the current user (/root/.bundle/config): "vendor/bundle"

without
Set for your local app (/var/www/discourse/.bundle/config): [:development, :test]
Set for the current user (/root/.bundle/config): [:development, :test]

jobs
Set for your local app (/var/www/discourse/.bundle/config): 4

retry
Set for your local app (/var/www/discourse/.bundle/config): 3

محاولة التثبيت مرة أخرى

قم بتشغيل التثبيت مرة أخرى لمكتبات Gems واخرج من الحاوية.

root@uat-app:/var/www/discourse# su discourse -c 'bundle install'
...........
Bundle complete! 125 Gemfile dependencies, 163 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into `./vendor/bundle`
root@uat-app:/var/www/discourse# exit

إنشاء مجلد لبيانات vBulletin

إنشاء مجلد

[root@uat standalone]# pwd
/var/discourse/shared/standalone
[root@uat standalone]# mkdir vbulletin

نسخ قاعدة بيانات vBulletin

[root@uat standalone]# scp <login user>@<vbulletin server IP>:/home/backup/vbulletin/vbulletin-2020-11-14-03:30:01.sql.bz2 ./vbulletin/.

فك ضغط قاعدة بيانات vBulletin

[root@uat containers]# docker exec -it app bash
root@uat-app:/# cd /shared/vbulletin
root@uat-app:/shared/vbulletin# bunzip2 vbulletin-2020-11-14-03\:30\:01.sql.bz2

إعداد مصدر البيانات

إنشاء قاعدة بيانات vb4

root@uat-app:/shared/vbulletin# mysql -uroot -p -e 'CREATE DATABASE vb4'
Enter password:

استيراد vBulletin إلى MariaDB

root@uat-app:/shared/vbulletin# mysql -uroot -p vb4 < vbulletin-2020-11-14-03\:30\:01.sql
Enter password:

فك ضغط أرشيفات الملفات الشخصية

[root@uat vbulletin]# tar xvfz signaturepics.tar.gz
[root@uat vbulletin]# tar xvfz customavatars.tar.gz
[root@uat vbulletin]# tar xvfz customprofilepics.tar.gz

تحديث كلمة مرور root لقاعدة البيانات

root@uat-app:/var/www/discourse# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 77
Server version: 10.3.25-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
Bye

الاستيراد إلى Discourse

تعيين تفاصيل اتصال مصدر البيانات

[root@uat vbulletin]# export DB_NAME="vb4"
[root@uat vbulletin]# export DB_USER="root"
[root@uat vbulletin]# export DB_PW="1234"
[root@uat vbulletin]# export TABLE_PREFIX="vbulletin"
[root@uat vbulletin]# export ATTACHMENT_DIR='/shared/vbulletin'
[root@uat vbulletin]# export TIMEZONE="America/Vancouver"
[root@uat vbulletin]# cd /var/www/discourse
root@uat-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:1234@localhost wants vb4
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

importing groups...
15 / 15 (100.0%) [3272 items/min] n]
importing users
117 / 11033 ( 1.1%) [145 items/min] in]
4 إعجابات

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

إعجابَين (2)

لا أعتقد ذلك. لقد قمت بتغيير كلمة المرور صراحةً للتو وتمكن من التشغيل. أواجه مشكلة الآن عند استيراد الرسائل الخاصة. أرى الكثير من الرسائل التالية. هل لديك أي فكرة عما تعنيه؟

جاري استيراد الرسائل الخاصة...
      139 / 177409 (  0.1%)  [399 عنصر/دقيقة]  أحد معرفات المشاركين هو nil -- [nil, 270]
pm-149 ليس له هدف (a:1:{i:486;s:5:"TonyN";})
      364 / 177409 (  0.2%)  [418 عنصر/دقيقة]  أحد معرفات المشاركين هو nil -- [nil, 276]
pm-420 ليس له هدف (a:1:{i:623;s:14:"the other side";})
      571 / 177409 (  0.3%)  [414 عنصر/دقيقة]  أحد معرفات المشاركين هو nil -- [nil, 445]
pm-702 ليس له هدف (a:1:{i:767;s:6:"greatg";})
      572 / 177409 (  0.3%)  [414 عنصر/دقيقة]  أحد معرفات المشاركين هو nil -- [nil, 445]
      605 / 177409 (  0.3%)  [416 عنصر/دقيقة]  أحد معرفات المشاركين هو nil -- [nil, 461]
إعجاب واحد (1)

إما أن هؤلاء المستخدمين لم يتم استيرادهم لسبب ما (كان سبب ذلك غالبًا عنوان بريد إلكتروني مفقود، لكن ينبغي أن يكون هذا قد تم حله الآن)، أو أن الكود المسؤول عن البحث عن أسماء المستخدمين المستوردة لا يعمل لسبب آخر (ربما بسبب حالة الأحرف في اسم المستخدم؟).

3 إعجابات

@pfaffman نعم، يبدو الأمر كذلك، رغم أن بعض التفاصيل غير واضحة. لننظر في المثال الأول، على سبيل المثال:

  1. ما معنى pm-149؟
  2. في a:1:{i:486;s:5:"TonyN";}، يبدو النص “TonyN” اسم مستخدم، لكن ماذا عن الأرقام الأخرى؟
  3. وكيف الحال مع [nil, 270]؟ ما الذي يرمز إليه الرقم 270؟

إذا تمكنت من فهم ما يشكو منه، يمكنني على الأقل محاولة البحث في قاعدة البيانات لمعرفة ما إذا كانت هناك أي مشاكل في البيانات. لكنني لست متأكدًا من المعنى الحقيقي لهذه العناصر.

بالمناسبة، لاحظت أيضًا أن جميع المنتديات المستوردة لديها إذن للجميع. هذا يعني أن المنتديات التي كانت مسموحًا بها للمشرفين فقط أصبحت مرئية للجميع. هل توجد طريقة للتحكم في ذلك؟

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

عذرًا. لا أتذكر بشكل كافٍ لشرح الأمر. هذا كل ما لدي من مساعدة مجانية لأقدمها في هذا الشأن.

بالطبع. راجع Understanding groups and category permissions

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

إعجابَين (2)

بعد اتباع تعليمات @titusc، يبدو أن لدي مشاكل في استيراد قاعدة البيانات…

root@DO-Discourse-app:/shared/vbulletin# mysql -uroot -p vb4 < CC12-Sat-Full-Backup.sql
أدخل كلمة المرور: 
ERROR 1265 (01000) في السطر 4928: تم قطع البيانات للعمود 'method' في الصف 1
root@DO-Discourse-app:/shared/vbulletin#

هل لديك أي اقتراحات حول ما تبحث عنه؟

لا بأس، الأخطاء موجودة في قاعدة البيانات الأصلية…

إعجابَين (2)