Problem beim Zusammenführen von zwei Foren

Hallo,

ich führe zwei Foren über das Tutorial zusammen, das hier zu finden ist.

Ich bleibe beim Befehl gunzip < /path/to/data/other-2018-08-02-134227-v2018xxx.tar.gz | psql -d copyme hängen.
Er gibt mir viele Zeilen mit Importfehlern in unverständlichen Zeichen zurück.

Hier sind die durchgeführten Schritte:

  • Discourse-Installation über die offizielle Methode auf VPS.
  • Import des zu zusammenführenden Backups (forumother) über die GUI.
  • Backup davon (um ein Backup mit der neuesten Version von Discourse zu haben).
  • Import des Backups des Zielforums (forumdest).
  • Import des Backups von forumother über SFTP in den Ordner /var/discourse/shared/standalone/backups/default.

Dann gehe ich in den obigen Ordner und führe den Befehl tar xvzf forumother.tar.gz (mit dem echten Namen des Backups) aus.

Richtung cd /var/discourse dann ./launcher enter app

sudo -u postgres psql und CREATE DATABASE "copyme" ENCODING = 'utf8'; und ich beende mit q

Hier bleibe ich stecken.
Der Befehl gunzip < public/backups/default/forumother.tar.gz | psql -d copyme funktioniert so nicht.
Der Fehler lautet psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "root" does not exist

Ich sehe, dass es sich um ein Verbindungsproblem handelt, aber ich sehe nicht, wie ich es lösen kann.

Ich habe versucht, mich als postgres-Benutzer anzumelden su - postgres und dann den Befehl gunzip ... auszuführen, aber dann ist die Ausgabe des Befehls völlig inkonsistent.

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
invalide Befehl \{wB
invalide Befehl \֬IeY┴WPC\u0018\u003cP%£6؜\u001f◆BP␌U@Q█5
␋┼┴▒┌␋␍ ␌└└▒┼␍ \
␋┼┴▒┌␋␍ ␌└└▒┼␍ \];*░Һ
␋┼┴▒┌␋␍ ␌└└▒┼␍ \FMݤ!\u0011≥"≠\u0014±↓\u001cQʏC\u001dMHȽ◆)\u0026E„/M6\u0010\u000b!◆┐
␋┼┴▒┌␋␍ ␌└└▒┼␍ \u0018↑
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␊° █│37 █│49
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉␉
␋┼┴▒┌␋␍ ␌└└▒┼␍ \лT4٩3┼←
␋┼┴▒┌␋␍ ␌└└▒┼␍ \u0016^E\u001aC◆≥]B2Ɣ?8[\u0012N→^G9←\u001f@  ±\u001d4?W\u001fY\u0013°O͖↓\u0014HY┬4
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│␉2
...
invalide Befehl \UWXJ\u0026qkW*S\u0019Qy2漆\u0026\u0015%\u003e\u0004N≤OI2·^;├
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2d\u001d-ɸjrR*֬\u0016\u0014\u001e\u0026\u0013^_'\u0013\u0005Ƶ褚N2H\u0012hIu
S3
invalide Befehl \VI
invalide Befehl \}Jݐ
invalide Befehl \BQNr|΅tU~#_k#D,WHfqtC
invalide Befehl \\\u0002syJ\u0006\u0016x%
invalide Befehl \E\u0016q
invalide Befehl \-KmJ
invalide Befehl \
invalide Befehl \/ly=}E~ԚYj\u003enO
invalide Befehl \SM!{Co\u0001~UH^x)*O}9vUǙ\u001ek}LQ
invalide Befehl \eH\u003c=\u0019g\u0006TR\u0003P\u0002R\u00061}{~/t!wiw\u0011hӒC\u0010ґJmCĥ=;O^p*-
invalide Befehl \\\u001cgq{cr}N;.
invalide Befehl \2p3a\u0013-.\u0010C:m\u001f_Y\u0016\u0017@c\u003c4/mvΩߵj]SޙU"O}$[
invalide Befehl \)
invalide Befehl \
invalide Befehl \V\u0006OtDIM2+͆Yq4\u0014ŠR\u0014
invalide Befehl \WHElnHBDm%?PBFrOڙ}d"
invalide Befehl \P\u0004jsחPm\u0006q\u0013\u0019J[B\u0001@$Wt*\u0003!\u0026|Zz))Q6AJ\u0012\u0005Y%!/6=JRJBPþA)YTZ┘=!M^␉CO)→└␋9\u0004\u001f┤E▒5█E≤Pі
T│ȐOȾ\u001cB)W┌Ad\u0004\u001c:\u0004\u001e}1,kNDoO\u001c\u001e')G^W5\u000b:B␊I│7!N;─À\u001f@#┘\u0017
┼┴▒┌␋␍ ␌└└▒┼␍ \u00026◆3
␋┼┴▒┌␋␍ ␌└└▒┼␍ \2�Ψ)VD4π]
ERROR:  ␋┼┴▒┌␋␍ ␉≤├␊ ␊─┤␊┼␌␊ ° ␊┼␌␍␋┼± "UTF8": █│89
├±␊@├␊├°┤└↑▒:·$

Ich habe im Forum gesucht, aber nichts dazu gefunden.

Daher zähle ich auf Ihre Hilfe und danke Ihnen im Voraus.

PS: Mein Englisch ist schlecht, daher ist es möglich, dass ich nicht die richtigen Wörter für eine gute Suche im Forum verwende oder dass ich das zu Beginn dieses Beitrags zitierte Tutorial falsch interpretiere.

Wahrscheinlich versucht psql, Ihren aktuellen Systembenutzer (root) zu verwenden, der in Postgres nicht existiert. Möglicherweise müssen Sie den Benutzer angeben, wenn Sie psql ausführen: psql -U postgres

Und überprüfen Sie dann diesen Schritt:

6 „Gefällt mir“

Danke für die Antwort, ich werde es heute Abend versuchen und mich wieder bei Ihnen melden, um Ihnen Bescheid zu geben.

1 „Gefällt mir“

Hallo nochmal,

zunächst einmal vielen Dank für Ihre Hilfe. Meine Antwort ist etwas lang, aber sie beschreibt die unternommenen Schritte im Detail.

Ben, nach mehreren Versuchen seit der letzten Nachricht habe ich immer noch die Unmöglichkeit, den Befehl gunzip < blabla mit einer Fehlermeldung bei der Authentifizierung auszuführen.

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"

Ich gebe Ihnen die durchgeführten Schritte an:

  • Ich habe mit einer frischen offiziellen Installation begonnen.

  • Meine beiden Backups wurden mit der neuesten Version von Discourse erstellt.

  • Ich importiere und stelle mein “forumDest”-Backup wieder her.

  • Ich lade das “ForumOther”-Backup nach /var/discourse/shared/standalone/backups/default hoch.

  • Ich verbinde mich per SSH

  • Ich gehe zu cd /var/discourse

  • Ich betrete den Container mit dem Befehl ./launcher enter app.
    Ich entpacke das Archiv “ForumOther.tar.gz” im Verzeichnis /var/discourse/shared/standalone/backups/default

  • Ich setze das Passwort zurück

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

Hier ist das Ergebnis des ls-Befehls: forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz ist ForumOther und home-assistant-communaute-francophone-2022-04-24-111032-v20220304162250.tar.gz ist ForumDest.

Ich setze das Postgres-Passwort mit den folgenden Befehlen zurück:

sudo -u postgres psql
\password postgres
(neues Passwort eingeben)
\q

Dies ergibt:

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
  • Erstellung der Datenbank “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$
  • Ich führe den Befehl postgres@testforum-app:/var/www/discourse/public/backups/default$ gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -d copyme aus
    oder gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz | psql -U postgres -d copyme
    wie erwähnt.

Ich kann den Anfang des Prozesses nicht sehen, aber am Ende gibt es immer Folgendes aus:

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$

Ich verstehe also, dass es ein Problem mit der Kodierung gibt?

Was ich versucht habe:
Die Befehle trennen:

  • Entpacken des ForumOther-Backups gunzip < forum-francophone-home-assistant-2022-04-24-120337-v20220407195246.tar.gz, was anscheinend etwas in unverständlicher Sprache extrahiert.
  • Verbindung zur DB 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=# 

Aber sobald ich mit der “copyme”-Datenbank verbunden bin, weiß ich nicht, was ich tun soll.

Ich habe die folgenden Anleitungen für die IMPORT-Befehle geprüft, aber dasselbe Problem: Wo sollen sie ausgeführt werden? Wie macht man das? Mit welchem Benutzer?

Versuchen wir es Schritt für Schritt.

Wenn ich Erfolg habe, werde ich meine Vorgehensweise genauer beschreiben und etwas detaillierter als das ursprüngliche Tutorial (das den Verdienst hat, die Grundprinzipien zu erklären und zu existieren).

Vielen Dank nochmals für Ihre Zeit und Hilfe.

Hallo zusammen,

Ich habe gute Fortschritte bei meinem Problem gemacht.

Jetzt hänge ich kurz bevor das Import-Skript ausgeführt wird.

Ich führe bundle install und dann IMPORT=1 bundle install aus und erhalte an diesem Punkt diesen Fehler:

Ein Fehler ist beim Installieren von tiny_tds(2.1.5) aufgetreten, und Bundler kann nicht fortfahren.

Ich führe immer noch den vollständigen Befehl aus: 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

Dieses Mal ist es dieser Fehler:

Die Git-Quelle https://github.com/nlalonde/ruby-bbcode-to-md ist noch nicht ausgecheckt.
Bitte führen Sie `bundle install` aus, bevor Sie versuchen, Ihre Anwendung zu starten.

Haben Sie eine Idee?
Danke

Hallo,

Ein weiterer Schritt vorwärts im Ziel, zwei Foren zusammenzuführen.

Ich habe keine Abhängigkeitsprobleme mehr, aber ich scheine ein Rechtsproblem beim Starten des Skripts zu haben.

Ich starte das Skript mit einer lokalen Datenbank auf einer offiziellen Discourse-Installation.

Der Skriptbefehl, den ich ausführe, und die Rückgabe:

discourse@testforum-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=hacf2022 SOURCE_B
exec ruby script/bulk_import/discourse_merger.rb
Lade Anwendung...
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=


Danke



Ich füge Ihnen auch die ausgeführten Befehle bei (die für andere nützlich sein könnten).

Laden Sie other.forum.backup nach `/var/discourse/shared/standalone/backups/default` hoch und extrahieren Sie `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


Abhängigkeiten installieren nano, sqlite3 und mysql2
Als Root-Benutzer

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 GitHub - nlalonde/ruby-bbcode-to-md: Convert BBCode to Markdown.
cd ruby-bbcode-to-md
gem build ruby-bbcode-to-md.gemspec
gem install ruby-bbcode-to-md-*.gem


**Tiny_tds installieren**
Sie benötigen FreeTDS für die Installation von 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

Für tiny_tds

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


Skript ausführen

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 „Gefällt mir“

Es sieht so aus, als hättest du beim Zeitpunkt deiner Aktion Pech gehabt. Vor 11 Tagen gab es einen Commit, der Discourse auf Rails 7 aktualisiert hat. Die Import-Skripte verwenden die Methode ActiveRecord::Base.connection_config, die mit Rails 7.0.0rc1 entfernt wurde.
@loic Es sieht so aus, als wären die Import-Skripte bei der Aktualisierung übersehen worden.

1 „Gefällt mir“

Vielen Dank für diese Antwort,

Das sind großartige Neuigkeiten, da ich nicht sehen konnte, woher es kommen könnte.

Ich werde auf das Update warten, es sei denn, ich kann das Merge-Skript selbst aktualisieren?

Danke

1 „Gefällt mir“

Habe gerade einen PR geöffnet, er sollte bald gemerged werden :slight_smile:

3 „Gefällt mir“

Hallo,

Vielen Dank für die Nachverfolgung und die Reaktionsfähigkeit.

Da die Migration von zwei Foren ein langer Weg voller Fallstricke ist, stehe ich wieder vor einem Problem.
Ich habe gerade die Änderung an der Datei discourse_merge.rb vorgenommen und dann den Befehl erneut ausgeführt.

Ich habe jetzt ein Problem mit einem vorhandenen HASH.

Ich verstehe, dass es sich um ein Duplikatproblem handelt, aber welcher Art?

Ich habe bereits einen doppelten Benutzer gelöscht, nachdem ich versucht habe, ihn für meinen Test umzubenennen, aber jetzt ist es dieses Token-Problem (obwohl ich denke, dass Duplikate auf Benutzerebene behandelt werden?)

Vielen Dank nochmals für Ihre Hilfe.

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

Hallo.

Trotz mehrerer Probleme bin ich hier am Ende dieser Migration angekommen.

Die letzten Probleme ergaben sich aus Benutzern, die auf den beiden Foren mit unterschiedlichen primären Adressen registriert waren, aber auch aus fehlenden Tabellen in einem Forum.

Ich werde die vollständige Vorgehensweise hierher zurückbringen, sobald ich etwas Zeit habe.

Vielen Dank nochmals an @Constanza_Abarca für seine Hilfe.

1 „Gefällt mir“

Impliziert dies, dass die beiden Instanzen auf unterschiedlichen Versionen liefen und/oder unterschiedliche Plugins installiert hatten? Ich denke, meine Erwartung wäre, wenn ich selbst eine solche Zusammenführung durchführen würde, dass ich vor allem Folgendes tun sollte:

  • Backups von beiden erstellen
  • Sicherstellen, dass beide die gleiche Version von Discourse ausführen
  • Sicherstellen, dass das Ziel alle Plugins installiert hat, die die Quelle hat
  • (Optional?) Sicherstellen, dass die Quelle alle Plugins installiert hat, die das Ziel hat
  • Erneut Backups erstellen
3 „Gefällt mir“

Hallo,

Die beiden Foren sind in der gleichen Version, aber vielleicht nicht mit den gleichen Plugins.

Dies sind nur kleine Änderungen, die ich von Hand vorgenommen habe.

Für die eigentliche Zusammenführung werde ich versuchen, mit den installierten Plugins zu sehen.