Problema PG::ConnectionBad quando si uniscono due forum nonostante diversi successi precedenti

Ciao,

Avendo già effettuato un merge di due forum ad aprile, su un server di test, che è andato molto bene. Abbiamo deciso di unire definitivamente i due forum.

Seguendo la mia procedura dell’epoca, mi ritrovo con un errore di connessione a Postgres, all’avvio dello script di merge.

Ci sto lavorando da quattro giorni, ma non essendo uno sviluppatore, sono un po’ limitato nel trovare il problema.

Grazie in anticipo

Ecco l’errore:

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)


Colgo l’occasione per riproporre la procedura completa di merge.

Questa procedura si basa sul post originale e sui problemi riscontrati durante i miei test

Questa procedura ha funzionato ad aprile (vedi questo topic).

  • Iniziare con backup aggiornati dei due forum,
  • Installare un discourse,
  • Importare i due backup,
  • Ripristinare il forum da conservare.

In SSH:

  • Andare nella cartella /var/discourse
  • Entrare nell’app ./launcher enter app.

Creazione del DB.

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

Modifica della password dell’utente postgres

\password postgres

Uscire da postgres

\q

Uscire dall’utente postgres

exit

Passare all’utente discourse

su discourse

Decompressione del salvataggio del forum VECCHIO
Andare nella cartella corrispondente cd public/backups/default
Estrarre il backup VECCHIO tramite il comando tar xvzf old.forum.tar.gz

Copia da BDD.lu a BDD copyme.

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

Uscire dall’utente discourse

exit

Dipendenze

Dipendenze nano, sqlite3 e mysql2
(con utente root 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 ../

Installazione di Tiny_tds
Devi installare FreeTDS e poi Tiny_tds.
Per 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

Per Tiny_tds:

gem install tiny_tds
gem install ruby-bbcode-to-md
cd ../

Lo script

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

Tradotto con www.DeepL.com/Translator (versione gratuita)
1 Mi Piace

Ciao,

Postgres utilizza la porta 5432 (controlla tramite \\conninfo nel comando psql), ma temo che nel file connection.rb venga chiamata la porta 5433.

La password è corretta, verificata con il comando psql postgres://postgres:password@127.0.0.1:5432

Qualcuno può confermare che non ci sono errori nella porta?

Grazie in anticipo

1 Mi Piace

Ho ricevuto lo stesso errore. Sembra che la porta non venga caricata nelle configurazioni del DB qui: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Se esegui questo da una console Rails:

[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=>{}}

La porta non è nella configurazione, ma il codice presuppone che lo sia: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Mentre questo è corretto nel core, puoi inserire la porta manualmente, quindi invece di

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

usa:

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

Grazie grazie grazie

Ho provato con porta = 5432 ma non porta = 5432

Per aver avuto la testa sul manubrio ci perdiamo le cose

Grazie ancora

2 Mi Piace

Grazie @McFly per aver messo insieme una guida completa. Questo è utile. È possibile automatizzare tutti questi passaggi? E creare un cron job per questo?

1 Mi Piace

Ciao,

Sapendo che normalmente non si tratta di una macchia che deve essere ripetuta, non so se sarebbe utile.

2 Mi Piace

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