Problema PG::ConnectionBad al fusionar dos foros a pesar de varios éxitos anteriores

Hola,

Después de haber realizado una fusión de dos foros en abril, en un servidor de prueba, que salió muy bien. Decidimos fusionar los dos foros de forma definitiva.

Siguiendo mi procedimiento de la época, me encuentro con un error de conexión a Postgres, al lanzar el script de fusión.

Llevo cuatro días intentándolo, pero al no ser desarrollador, estoy un poco limitado para encontrar el problema.

Gracias de antemano.

Aquí está el error:

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)


Aprovecho para poner el procedimiento completo de fusión.

Este procedimiento se basa en el post original y en los problemas encontrados durante mis pruebas

Este procedimiento funcionó en abril (ver este tema).

  • Empezar con copias de seguridad actualizadas de los dos foros,
  • Instalar un discourse,
  • Importar las dos copias de seguridad,
  • Restaurar el foro a conservar.

En SSH:

  • Ir a la carpeta /var/discourse
  • Entrar en la app ./launcher enter app.

Crear la DB.

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

Cambiar la contraseña del usuario postgres

\postgres password

Salir de postgres

\q

Salir del usuario postgres

exit

Cambiar al usuario discourse

su discourse

Descompresión de la copia de seguridad del foro ANTIGUO
Ir a la carpeta correspondiente cd public/backups/default
Extraer la copia de seguridad ANTIGUA con el comando tar xvzf old.forum.tar.gz

Copia de BDD.lu a BDD copyme.

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

Salir del usuario discourse

exit

Dependencias

Dependencias de nano, sqlite3 y mysql2
(con usuario root en /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 ../

Instalación de Tiny_tds
Tienes que instalar FreeTDS y luego Tiny_tds.
Para 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

Para Tiny_tds:

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

El 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

Traducido con www.DeepL.com/Translator (versión gratuita)
1 me gusta

Hola,

Postgres usa el puerto 5432 (comprueba con \\conninfo en el comando psql), pero me temo que en el archivo connection.rb llama al puerto 5433.
La contraseña es correcta, comprobada con el comando psql postgres://postgres:password@127.0.0.1:5432

¿Alguien puede confirmar que no hay ningún error en el puerto?

Gracias de antemano.

1 me gusta

Tengo el mismo error. Parece que el puerto no se está cargando en la configuración de la base de datos aquí: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Si ejecutas eso desde una consola de 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=>{}}

El puerto no está en la configuración, pero el código asume que sí lo está: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Si bien esto está corregido en el núcleo, puedes poner el puerto manualmente, así que en lugar de

@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 me gusta

Gracias, gracias, gracias

Lo intenté con port = 5432 pero no port = 5432

Por tener la cabeza en el manillar nos perdemos cosas

Gracias de nuevo

2 Me gusta

Gracias @McFly por armar una guía completa. Esto es útil. ¿Se pueden automatizar todos estos pasos? ¿Y crear un trabajo cron para ello?

1 me gusta

Hola,

Sabiendo que normalmente no es una mancha que deba repetirse, no sé si sería útil.

2 Me gusta

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