مشكلة دمج منتدين

Hello,

I am merging two forums together via the tutorial present here.

I’m getting stuck on the command gunzip < /path/to/data/other-2018-08-02-134227-v2018xxx.tar.gz | psql -d copyme
It returns me plenty of lines with import errors in unintelligible characters.

Here are the steps performed:

  • Discourse installation via official method on VPS.
  • Import via GUI of the backup to merge (forumother)
  • Backup of the latter (to have a backup with the latest version of discourse)
  • Import of the backup of the destination forum (forumdest)
  • Import of the backup of forumother via SFTP in the folder /var/discourse/shared/standalone/backups/default.

Then I go to the above folder and run the command tar xvzf forumother.tar.gz (with the real name of the backup).

Direction cd /var/discourse then ./launcher enter app

sudo -u postgres psql and CREATE DATABASE "copyme" ENCODING = 'utf8'; and I quit with q

It’s now that I’m stuck.
The command gunzip < public/backups/default/forumother.tar.gz | psql -d copyme does not work as it is.
The error is psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist

I can see that this is a connection problem, but I don’t see how to solve it.

I tried logging in as the postgres user su - postgres and then running the command gunzip ... but that’s when the command output is completely inconsistent.

postgres@testforum-app:~$ gunzip < /var/www/discourse/public/backups/default/forum-francophon
e-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme3
invalid command \W
invalid command \IeY┴WPC<P%£6؜◆BP␌U@Q█5
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
␋┼┴▒┌␋␍ ␌└└▒┼␍ \]
␋┼┴▒┌␋␍ ␌└└▒┼␍ \FMݤ!≥"≠±↓QʏC MHȽ◆)E„/M
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␊° █│37 █│49
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉␉
␋┼┴▒┌␋␍ ␌└└▒┼␍ \лT4٩3┼←
␋┼┴▒┌␋␍ ␌└└▒┼␍ \^E C◆≥]B2Ɣ?8[N→^G9← @  ±4?W␌Y°O͖↓HY┬4
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉2
...
invalid command \UWXJ&qkW*S Qy2漆% > N≤OI2·^;├
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2d-ɸjrR*֬
              S3
invalid command \VI
invalid command \}Jݐ
invalid command \BQNr|΅tU~#_k#D,WHfqtC
invalid command \ syJ x%
invalid command \E q
invalid command \-KmJ
invalid command \
invalid command \/ly=}E~ԚYj nO
invalid command \SM!{Co ~UH^x)*O}9vUǙ k}LQ
invalid command \eH<= g TR P R 1}{~/t!wiw hӒC ґJmCĥ=;O^p*-
invalid command \ gq{cr}N;.
invalid command \2p3a - . C:m _Y @c<4/mvΩߵj]SޙU"O}$[
invalid command \)
invalid command \
invalid command \WHElnHBDm%?PBFrOڙ}d"
invalid command \P jsחPm q J[B @$Wt* ! &|Zz))Q6AJ Y%!/6=JRJBPþA)YTZ┘=!M^␉CO)→└␋9 ┤E▒5█E≤Pі
T│ȐOȾ B)W┌Ad : }1,kNDoO ' G^W5 :B␊I│7!N;─À @#┘
┼┴▒┌␋␍ ␌└└▒┼␍ \ 6◆3
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2�Ψ)VD4π]
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│89
├±␊@├␊├°┤└↑▒:·$

I tried to search on the forum, but I didn’t find anything on this.

So I count on your help and thank you in advance.

PS: My English is bad, so it’s possible that I’m not using the right words for a good search on the forum or I’m misinterpreting the tutorial quoted at the beginning of this post.
مرحباً،

أنا أقوم بدمج منتدين معًا عبر البرنامج التعليمي الموجود هنا.

أواجه صعوبة في الأمر gunzip < /path/to/data/other-2018-08-02-134227-v2018xxx.tar.gz | psql -d copyme
إنه يعيد لي العديد من الأسطر مع أخطاء استيراد بأحرف غير مفهومة.

هذه هي الخطوات التي تم تنفيذها:

  • تثبيت Discourse بالطريقة الرسمية على VPS.
  • الاستيراد عبر واجهة المستخدم الرسومية للنسخة الاحتياطية المراد دمجها (منتدى آخر).
  • نسخة احتياطية للأخير (للحصول على نسخة احتياطية بأحدث إصدار من Discourse).
  • استيراد النسخة الاحتياطية للمنتدى الوجهة (منتدى الوجهة).
  • استيراد النسخة الاحتياطية لـ منتدى آخر عبر SFTP في المجلد /var/discourse/shared/standalone/backups/default.

ثم أذهب إلى المجلد أعلاه وأقوم بتشغيل الأمر tar xvzf forumother.tar.gz (مع الاسم الحقيقي للنسخة الاحتياطية).

الاتجاه cd /var/discourse ثم ./launcher enter app

sudo -u postgres psql و CREATE DATABASE "copyme" ENCODING = 'utf8'; وأخرج باستخدام q

هنا أواجه المشكلة.
الأمر gunzip < public/backups/default/forumother.tar.gz | psql -d copyme لا يعمل كما هو.
الخطأ هو psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist

أرى أن هذه مشكلة اتصال، لكنني لا أرى كيف يمكن حلها.

حاولت تسجيل الدخول كمستخدم postgres su - postgres ثم تشغيل الأمر gunzip ... ولكن هذا هو الوقت الذي يكون فيه ناتج الأمر غير متناسق تمامًا.

postgres@testforum-app:~$ gunzip < /var/www/discourse/public/backups/default/forum-francophon
e-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme3
invalid command \W
invalid command \IeY┴WPC<P%£6؜◆BP␌U@Q█5
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
␋┼┴▒┌␋␍ ␌└└▒┼␍ \]
␋┼┴▒┌␋␍ ␌└└▒┼␍ \FMݤ!≥"≠±↓QʏC MHȽ◆)E„/M
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␊° █│37 █│49
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉␉
␋┼┴▒┌␋␍ ␌└└▒┼␍ \лT4٩3┼←
␋┼┴▒┌␋␍ ␌└└▒┼␍ \^E C◆≥]B2Ɣ?8[N→^G9← @  ±4?W␌Y°O͖↓HY┬4
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉2
...
invalid command \UWXJ&qkW*S Qy2漆% > N≤OI2·^;├
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2d-ɸjrR*֬
              S3
invalid command \VI
invalid command \}Jݐ
invalid command \BQNr|΅tU~#_k#D,WHfqtC
invalid command \ syJ x%
invalid command \E q
invalid command \-KmJ
invalid command \
invalid command \/ly=}E~ԚYj nO
invalid command \SM!{Co ~UH^x)*O}9vUǙ k}LQ
invalid command \eH<= g TR P R 1}{~/t!wiw hӒC ґJmCĥ=;O^p*-
invalid command \ gq{cr}N;.
invalid command \2p3a - . C:m _Y @c<4/mvΩߵj]SޙU"O}$[
invalid command \)
invalid command \
invalid command \WHElnHBDm%?PBFrOڙ}d"
invalid command \P jsחPm q J[B @$Wt* ! &|Zz))Q6AJ Y%!/6=JRJBPþA)YTZ┘=!M^␉CO)→└␋9 ┤E▒5█E≤Pі
T│ȐOȾ B)W┌Ad : }1,kNDoO ' G^W5 :B␊I│7!N;─À @#┘
┼┴▒┌␋␍ ␌└└▒┼␍ \ 6◆3
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2�Ψ)VD4π]
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│89
├±␊@├␊├°┤└↑▒:·$

لقد حاولت البحث في المنتدى، لكنني لم أجد شيئًا حول هذا الموضوع.

لذا، أعتمد على مساعدتكم وأشكركم مقدمًا.

ملاحظة: لغتي الإنجليزية سيئة، لذلك من الممكن أنني لا أستخدم الكلمات الصحيحة للبحث الجيد في المنتدى أو أنني أسيء تفسير البرنامج التعليمي المذكور في بداية هذا المنشور.

على الأرجح، يحاول psql استخدام مستخدم النظام الحالي الخاص بك (root) والذي لا وجود له في Postgres. قد تحتاج إلى تحديد المستخدم عند تشغيل psql: psql -U postgres

ثم تحقق من هذه الخطوة:

6 إعجابات

شكراً على الإجابة، سأجرب الليلة وأعود إليك لأخبرك.

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

مرحباً مرة أخرى،

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

بن، بعد عدة محاولات منذ الرسالة الأخيرة، ما زلت أواجه استحالة تنفيذ الأمر gunzip < blabla مع خطأ مصادقة دائمًا.

discourse@testforum-app:/var/www/discourse$ gunzip < public/backups/default/forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -U postgres -d copyme
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres"

أقدم لك الخطوات التي تم تنفيذها:

  • بدأت بتثبيت رسمي جديد.

  • تم إجراء نسختي الاحتياطي باستخدام أحدث إصدار من Discourse.

  • أقوم باستيراد واستعادة النسخة الاحتياطية “forumDest”.

  • أقوم بتحميل النسخة الاحتياطية “ForumOther” إلى /var/discourse/shared/standalone/backups/default.

  • أتصل عبر SSH

  • أذهب إلى cd /var/discourse

  • أدخل الحاوية باستخدام الأمر ./launcher enter app.
    أقوم بفك ضغط الأرشيف “ForumOther.tar.gz” الموجود في /var/discourse/shared/standalone/backups/default

  • أقوم بإعادة تعيين كلمة المرور

root@testforum-app:/var/www/discourse/public/backups/default# ls
dump.sql.gz
forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz
home-assistant-communaute-francophone-2022-04-24-111032-v20220304162250.tar.gz
uploads

هذا هو نتيجة الأمر ls حيث forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz هو ForumOther و home-assistant-communaute-francophone-2022-04-24-111032-v20220304162250.tar.gz هو ForumDest

أقوم بإعادة تعيين كلمة مرور postgres باستخدام الأوامر التالية:

sudo -u postgres psql
\password postgres
(أدخل كلمة المرور الجديدة)
\q

هذا يعطي:

root@testforum-app:/var/www/discourse/public/backups/default# sudo -u postgres psql
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.

postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
postgres=# \q
  • إنشاء قاعدة البيانات “copyme”
root@testforum-app:/var/www/discourse/public/backups/default# su postgres
postgres@testforum-app:/var/www/discourse/public/backups/default$ psql
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.
postgres=# CREATE DATABASE "copyme2" ENCODING = 'utf8';
CREATE DATABASE
postgres=# \q
postgres@testforum-app:/var/www/discourse/public/backups/default$
  • أقوم بتشغيل الأمر postgres@testforum-app:/var/www/discourse/public/backups/default$ gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme
    أو gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -U postgres -d copyme
    كما ذكرت.

لا يمكنني رؤية بداية العملية، ولكن في النهاية يعطيني دائمًا

invalid command \P�jvsחP�m���q��J[B���@$��W�t*����!&|Zz)��)��Q�6�AJ�Y��%!/6=�JR��J��BPþ�A�)�YTZ�j��=! M��^bCO)+mi9���u�p�E��a��50��E�y��P���і��TxȐ��OȾ����B�)Wl��Ad�������:���}1���,kNDo�O�'�)G��^W����5��
                                                                                                                                                                                                        :��B�eIx7!N��;q�À@�#j���*
invalid command \�6���`�3�
invalid command \�2��󟯹�Ψ�)��V��D��4{]�
ERROR: invalid byte sequence for encoding "UTF8": 0x89
postgres@testforum-app:/var/www/discourse/public/backups/default$

لذلك أفهم أن هناك مشكلة في الترميز؟

ما جربته:
فصل الأوامر:

  • فك ضغط النسخة الاحتياطية ForumOther gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz والذي يبدو أنه يستخرج شيئًا بلغة غير مفهومة
  • الدخول إلى قاعدة البيانات psql -d copyme
postgres@testforum-app:/var/www/discourse/public/backups/default$ psql -d copyme
psql (13.6 (Debian 13.6-1.pgdg110+1))
Type "help" for help.

copyme=#

ولكن بمجرد الاتصال بقاعدة البيانات “copyme” لا أرى ما يجب فعله.

لقد نظرت في الأوامر التالية للاستيراد، ولكن نفس الشيء، أين يجب تنفيذها؟ كيف أفعل ذلك؟ مع أي مستخدم؟

دعنا نجرب خطوة بخطوة.

إذا نجحت، سأضع إجراءاتي بشكل أكثر دقة بتفصيل أكبر من البرنامج التعليمي الأصلي (الذي له ميزة شرح المبادئ الرئيسية ووجوده).

شكراً مرة أخرى على وقتك ومساعدتك.

مرحباً بالجميع،

لقد أحرزت تقدماً جيداً في مشكلتي.

الآن توقفت قبل تنفيذ البرنامج النصي للاستيراد.

أقوم بتشغيل bundle install ثم IMPORT=1 bundle install وفي هذه النقطة أحصل على هذا الخطأ

حدث خطأ أثناء تثبيت tiny_tds(2.1.5، ولا يمكن لـ Bundler المتابعة

ما زلت أقوم بتشغيل الأمر الكامل IMPORT=1 DB_NAME=copyme DB_PASS=password SOURCE_BASE_URL= UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb

هذه المرة، هذا هو الخطأ

المصدر git https://github.com/nlalonde/ruby-bbcode-to-md لم يتم سحبه بعد.
يرجى تشغيل `bundle install` قبل محاولة بدء تطبيقك

هل لديك فكرة؟
شكراً

أهلاً،

خطوة أخرى إلى الأمام، في هدف دمج منتدين.

لم تعد لدي أي مشكلة في الاعتماديات، ولكن يبدو أن لدي مشكلة في الأذونات عند تشغيل البرنامج النصي.

أقوم بتشغيل البرنامج النصي باستخدام قاعدة بيانات محلية على تثبيت رسمي لـ discourse.

أمر البرنامج النصي الذي أقوم بتشغيله والنتيجة:

discourse@testforum-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=hacf2022 SOURCE_B
exec ruby script/bulk_import/discourse_merger.rb
تحميل التطبيق...
Traceback (most recent call last):
        3: from script/bulk_import/discourse_merger.rb:817:in `<main>'
        2: from script/bulk_import/discourse_merger.rb:817:in `new'
        1: from script/bulk_import/discourse_merger.rb:21:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.2.4/lib/active_record/dynam
:Class (NoMethodError)
Did you mean?  connection_db_config
               connection_pool
               connection_class
               connection_class?
               connection_class=

شكرا

كما أرفق لك الأوامر التي تم تشغيلها (والتي قد تكون مفيدة للآخرين).

قم بتحميل other.forum.backup في /var/discourse/shared/standalone/backups/default واستخرج tar xvzf other.forum.backup.tar.gz

cd `/var/discourse
./laucher enter app
su postgres
psql
CREATE DATABASE "copyme" ENCODING = 'utf8';
\password postgres
\q
exit
su discourse
gunzip < public/backups/default/dump.sql.gz | psql -d copyme
exit

تثبيت الاعتماديات nano, sqlite3 et mysql2
مع المستخدم الجذر

apt update && apt upgrade
apt-get install -y nano sqlite3 libsqlite3-dev mariadb-server libmariadb-dev
gem install sqlite3 mysql2

ruby bbcode to md

git clone https://github.com/nlalonde/ruby-bbcode-to-md.git
cd ruby-bbcode-to-md
gem build ruby-bbcode-to-md.gemspec
gem install ruby-bbcode-to-md-*.gem

تثبيت Tiny_tds
تحتاج إلى FreeTDS لتثبيت Tiny_tds.

wget http://www.freetds.org/files/stable/freetds-1.3.10.tar.gz
tar -xzf freetds-1.3.10.tar.gz
cd freetds-1.3.10
./configure --prefix=/usr/local --with-tdsver=7.3
make
make install

لـ tiny_tds

gem install tiny_tds
gem install ruby-bbcode-to-md

تشغيل البرنامج النصي

su discourse
bundle config unset deployment
IMPORT=1 bundle install
IMPORT=1 DB_NAME=copyme DB_PASS=passpostgres SOURCE_BASE_URL=http://other.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
إعجاب واحد (1)

يبدو أنك لم تكن محظوظًا بالتوقيت الذي تقوم فيه بهذا. قبل 11 يومًا، كان هناك التزام بترقية Discourse لاستخدام Rails 7. تستخدم نصوص الاستيراد طريقة ActiveRecord::Base.connection_config التي تمت إزالتها مع Rails 7.0.0rc1.
@loic يبدو أنه تم تفويت نصوص الاستيراد عند إجراء الترقية.

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

أوه شكراً لك على هذه الإجابة،

إنها أخبار رائعة، لأنني لم أرَ من أين يمكن أن تأتي.

سأنتظر التحديث، إلا إذا كان بإمكاني تحديث نص الدمج بنفسي؟

شكراً

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

لقد فتحت للتو طلب سحب (PR)، ويجب دمجه قريبًا :slight_smile:

3 إعجابات

مرحباً،

شكراً جزيلاً على المتابعة وسرعة الاستجابة.

بما أن ترحيل منتدين هو طريق طويل مليء بالعقبات، فقد واجهت مشكلة مرة أخرى.
لقد أجريت التعديل على ملف discourse_merge.rb ثم أعدت تشغيل الأمر.

أواجه الآن مشكلة مع HASH موجود.

أفهم أن هذه مشكلة تكرار، ولكن ما طبيعتها؟

لقد حذفت بالفعل مستخدماً مكرراً، بعد محاولة إعادة تسميته لتجربتي، ولكن الآن هذه مشكلة الرمز (مع أنني أعتقد أن التكرارات على مستوى المستخدم يتم التعامل معها؟)

شكراً مرة أخرى على مساعدتك.

discourse@testforum-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=password SOURCE_BASE_URL=http://other.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
Loading application...
Starting...
Preloading I18n...
Fixing highest post numbers...
Loading imported group ids...
Loading imported user ids...
Loading imported category ids...
Loading imported topic ids...
Loading imported post ids...
Loading groups indexes...
Loading users indexes...
Loading categories indexes...
Loading topics indexes...
Loading posts indexes...
Loading post actions indexes...

merging users...
copying email_tokens...
Traceback (most recent call last):
        7: from script/bulk_import/discourse_merger.rb:817:in `<main>'
        6: from script/bulk_import/discourse_merger.rb:71:in `start'
        5: from /var/www/discourse/script/bulk_import/base.rb:100:in `run'
        4: from script/bulk_import/discourse_merger.rb:82:in `execute'
        3: from script/bulk_import/discourse_merger.rb:145:in `copy_user_stuff'
        2: from script/bulk_import/discourse_merger.rb:445:in `copy_model'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.3.5/lib/pg/connection.rb:262:in `copy_data'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.3.5/lib/pg/connection.rb:262:in `get_last_result': ERROR:  duplicate key value violates unique constraint "index_email_tokens_on_token_hash" (PG::UniqueViolation)
DETAIL:  Key (token_hash)=(07165399523fcdce0679e45950f0260b61386a5c886e3e68fa6cf047d84d1caf) already exists.
CONTEXT:  COPY email_tokens, line 1

مرحباً.
لقد وصلت هنا إلى نهاية هذه الهجرة على الرغم من العديد من المشاكل.
جاءت المشاكل الأخيرة من المستخدمين المسجلين بعناوين أساسية مختلفة في المنتديين، ولكن أيضًا من الجداول المفقودة في أحد المنتديين.
سأعود لوضع الإجراء الكامل هنا بمجرد أن يكون لدي بعض الوقت.
شكراً مرة أخرى لـ @Constanza_Abarca على مساعدته.

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

هل هذا يعني أن المثيلين كانا على إصدارات مختلفة و/أو كان لديهما إضافات مختلفة مثبتة؟ أعتقد أن توقعي إذا كنت سأقوم بدمج كهذا بنفسي، سيكون أنه قبل أي شيء آخر يجب علي:

  • أخذ نسخ احتياطية من كليهما
  • التأكد من أن كلاهما يعملان بنفس إصدار Discourse
  • التأكد من أن الوجهة لديها جميع الإضافات مثبتة مثل المصدر
  • (اختياري؟) التأكد من أن المصدر لديه جميع الإضافات المثبتة مثل الوجهة
  • أخذ نسخ احتياطية مرة أخرى
3 إعجابات

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