Problem PG::ConnectionBad beim Zusammenführen von zwei Foren trotz mehrerer früherer Erfolge

Hallo,

Nachdem wir bereits im April eine Zusammenführung von zwei Foren auf einem Testserver durchgeführt haben, die sehr gut verlief. Haben wir beschlossen, die beiden Foren endgültig zusammenzuführen.

Nach meinem damaligen Vorgehen erhalte ich beim Starten des Zusammenführungsskripts eine Fehlermeldung bei der Verbindung zu Postgres.

Ich bin nun seit vier Tagen dabei, aber da ich kein Entwickler bin, bin ich bei der Fehlersuche etwas eingeschränkt.

Vielen Dank im Voraus.

Hier ist der Fehler:

discourse@serveur-app:/var/www/discourse$ IMPORT=1 DB_NAME=copyme DB_PASS=passwdDB SOURCE_BASE_URL=http://old.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb
Loading application...
Traceback (most recent call last):
	5: from script/bulk_import/discourse_merger.rb:817:in `<main>'
	4: from script/bulk_import/discourse_merger.rb:817:in `new'
	3: from script/bulk_import/discourse_merger.rb:22:in `initialize'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg.rb:69:in `connect'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg/connection.rb:661:in `new'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/pg-1.4.2/lib/pg/connection.rb:708:in `connect_to_hosts': could not match 0 port numbers to 1 hosts (PG::ConnectionBad)


Ich nutze diese Gelegenheit, um die vollständige Zusammenführungsanleitung zu veröffentlichen.

Diese Anleitung basiert auf dem Originalbeitrag und den Problemen, die bei meinen Tests aufgetreten sind.

Diese Anleitung hat im April funktioniert (siehe dieses Thema).

  • Beginnen Sie mit aktuellen Backups der beiden Foren,
  • Installieren Sie eine Discourse-Instanz,
  • Importieren Sie die beiden Backups,
  • Stellen Sie das zu behaltende Forum wieder her.

In SSH:

  • Wechseln Sie in den Ordner /var/discourse
  • Geben Sie die App mit ./launcher enter app ein.

Erstellen Sie die DB.

su postgres
psql
CREATE DATABASE copyme ENCODING='utf8';

Ändern Sie das Passwort des postgres-Benutzers

\password postgres

Beenden Sie postgres

\q

Beenden Sie den postgres-Benutzer

exit

Wechseln Sie zum discourse-Benutzer

su discourse

Entpacken des alten Forum-Backups
Wechseln Sie in den entsprechenden Ordner cd public/backups/default
Extrahieren Sie das alte Backup mit dem Befehl tar xvzf old.forum.tar.gz

Kopieren von BDD.lu nach BDD copyme.

gunzip < dump.sql.gz | psql -d copyme

Beenden Sie den discourse-Benutzer

exit

Abhängigkeiten

nano, sqlite3 und mysql2 Abhängigkeiten
(als root-Benutzer in /var/www/discourse)

apt update && apt upgrade -y
apt-get install -y nano sqlite3 libsqlite3-dev mariadb-server libmariadb-dev -y
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
cd ../

Installation von Tiny_tds
Sie müssen FreeTDS und dann Tiny_tds installieren.
Für FreeTDS:

wget http://www.freetds.org/files/stable/freetds-1.3.12.tar.gz
tar -xzf freetds-1.3.12.tar.gz
cd freetds-1.3.12
./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
cd ../

Das Skript

su discourse
bundle config unset deployment
IMPORT=1 bundle install
IMPORT=1 DB_NAME=copyme DB_PASS=passwdDB SOURCE_BASE_URL=http://old.forum.fr UPLOADS_PATH=/var/www/discourse/public/uploads/default bundle exec ruby script/bulk_import/discourse_merger.rb

Übersetzt mit www.DeepL.com/Translator (kostenlose Version)
1 „Gefällt mir“

Hallo,

Postgres verwendet Port 5432 (prüfen Sie dies über \\conninfo im psql-Befehl), aber ich fürchte, in der Datei connection.rb wird Port 5433 aufgerufen.
Das Passwort ist gut und wurde mit dem Befehl psql postgres://postgres:password@127.0.0.1:5432 überprüft.

Kann jemand bestätigen, dass es keinen Fehler beim Port gibt?

Vielen Dank im Voraus

1 „Gefällt mir“

Ich habe denselben Fehler erhalten. Es scheint, dass der Port nicht in den DB-Konfigurationen geladen wird: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Wenn Sie das von einer Rails-Konsole aus ausführen:

[1] pry(main)> ActiveRecord::Base.connection_db_config.configuration_hash
=> {:prepared_statements=>false,
 :adapter=>"postgresql",
 :database=>"discourse_development",
 :min_messages=>"warning",
 :pool=>5,
 :timeout=>5000,
 :checkout_timeout=>5,
 :advisory_locks=>false,
 :host_names=>["localhost"],
 :variables=>{}}

Der Port ist nicht in der Konfiguration, aber der Code geht davon aus, dass er vorhanden ist: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Während dies im Kern behoben ist, können Sie den Port manuell einfügen, also anstelle von

@raw_connection = PG.connect(dbname: local_db[:database], host: 'localhost', port: local_db[:port], user: 'postgres', password: db_password)

verwenden Sie:

@raw_connection = PG.connect(dbname: local_db[:database], host: 'localhost', port: 5432, user: 'postgres', password: db_password)
1 „Gefällt mir“

Danke, danke, danke

Ich habe es mit Port = 5432 versucht, aber nicht mit Port = 5432

Weil wir den Kopf in den Lenker stecken, verpassen wir Dinge

Nochmal danke

2 „Gefällt mir“

Danke @McFly für die Erstellung eines vollständigen Leitfadens. Das ist hilfreich. Können all diese Schritte automatisiert werden? Und einen Cronjob dafür erstellen?

1 „Gefällt mir“

Hallo,

Da dies normalerweise keine Wiederholung erforderliche Verunreinigung ist, bin ich mir nicht sicher, ob dies nützlich wäre.

2 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.