Problema PG::ConnectionBad ao mesclar dois fóruns apesar de vários sucessos anteriores

Olá,

Tendo já feito uma fusão de dois fóruns em abril, num servidor de teste, que correu muito bem. Decidimos fundir os dois fóruns para valer.

Seguindo o meu procedimento da época, encontro-me com um erro de conexão ao Postgres, ao lançar o script de fusão.

Estou nisto há quatro dias, mas não sendo um desenvolvedor, estou um pouco limitado em encontrar o problema.

Obrigado desde já

Aqui está o erro:

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)


Aproveito para colocar o procedimento completo de fusão.

Este procedimento baseia-se no post original e nos problemas encontrados durante os meus testes

Este procedimento funcionou em abril (ver este tópico).

  • Comece com backups atualizados dos dois fóruns,
  • Instale um discourse,
  • Importe os dois backups,
  • Restaure o fórum a manter.

Em SSH:

  • Vá para a pasta /var/discourse
  • Entre na app ./launcher enter app.

Criar a BD.

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

Alterar a senha do utilizador postgres

\password postgres

Sair do postgres

\q

Sair do utilizador postgres

exit

Mudar para o utilizador discourse

su discourse

Descompressão do backup do fórum ANTIGO
Vá para a pasta correspondente cd public/backups/default
Extraia o backup ANTIGO através do comando tar xvzf old.forum.tar.gz

Copiar de BDD.lu para BDD copyme.

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

Sair do utilizador discourse

exit

Dependências

Dependências nano, sqlite3 e mysql2
(com utilizador root em /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 ./..

Instalação do Tiny_tds
Tem de instalar o FreeTDS e depois o 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 ./..

O 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

Traduzido com www.DeepL.com/Translator (versão gratuita)
1 curtida

Olá,

O Postgres usa a porta 5432 (verifique via \\conninfo no comando psql), mas receio que no arquivo connection.rb ele chame a porta 5433.
A senha está correta, verificada com o comando psql postgres://postgres:password@127.0.0.1:5432

Alguém pode confirmar que não há erro na porta?

Agradeço desde já.

1 curtida

Recebi o mesmo erro. Parece que a porta não está sendo carregada nas configurações do banco de dados aqui: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Se você executar isso de um 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=>{}}

A porta não está na configuração, mas o código assume que está: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

Embora isso esteja corrigido no core, você pode colocar a porta manualmente, então em vez de

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

use:

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

Obrigado, obrigado, obrigado

Tentei com port = 5432 mas não port = 5432

Por termos a cabeça nos guidões, perdemos coisas

Obrigado novamente

2 curtidas

Obrigado @McFly por montar um guia completo. Isso é útil. Todos esses passos podem ser automatizados? E criar um cron job para isso?

1 curtida

Olá,

Sabendo que normalmente não é uma mancha que deve ser repetida, não sei se seria útil.

2 curtidas

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