이전 여러 성공에도 불구하고 두 포럼 병합 시 PG::ConnectionBad 문제 발생

안녕하세요,

4월에 테스트 서버에서 두 개의 포럼을 병합하는 작업을 이미 수행했으며, 매우 잘 진행되었습니다. 이에 따라 두 포럼을 최종적으로 병합하기로 결정했습니다.

당시 제가 따랐던 절차에 따라 병합 스크립트를 실행하려고 하니 Postgres 연결 오류가 발생하고 있습니다.

4일째 이 문제에 매달리고 있지만, 개발자가 아니라서 문제를 찾는 데 다소 한계가 있습니다.

미리 감사드립니다.

오류 내용은 다음과 같습니다:

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)


이 기회를 빌려 전체 병합 절차를 공유합니다.

이 절차는 원본 게시글과 테스트 중 만난 문제들에 기반하고 있습니다.

이 절차는 4월에 성공적으로 적용되었습니다(이 토픽 참고).

  • 두 포럼의 최신 백업으로 시작합니다.
  • discourse를 설치합니다.
  • 두 개의 백업을 가져옵니다.
  • 유지할 포럼을 복원합니다.

SSH에서:

  • /var/discourse 폴더로 이동합니다.
  • ./launcher enter app 명령으로 앱에 진입합니다.

DB 생성.

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

postgres 사용자 비밀번호 변경

\postgres password

postgres 종료

\q

postgres 사용자 종료

exit

discourse 사용자로 전환

su discourse

구 포럼 백업 압축 해제
해당 폴더로 이동 cd public/backups/default
tar xvzf old.forum.tar.gz 명령으로 구 백업을 추출합니다.

BDD.lu에서 BDD copyme로 복사.

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

discourse 사용자 종료

exit

종속성

nano, sqlite3 및 mysql2 종속성
(/var/www/discourse에서 root 사용자로 실행)

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 ./..

Tiny_tds 설치
FreeTDS를 먼저 설치한 후 Tiny_tds를 설치해야 합니다.
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

Tiny_tds의 경우 :

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

스크립트

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

www.DeepL.com/Translator(무료 버전)로 번역됨

안녕하세요,

Postgres는 포트 5432를 사용하긴 합니다(psql 명령에서 \conninfo로 확인 가능), 하지만 connection.rb 파일에서는 포트 5433을 호출하고 있는 것 같습니다.

패스워드는 psql postgres://postgres:password@127.0.0.1:5432 명령으로 확인해 보니 정상입니다.

포트에 오류가 없는지 확인해 주실 수 있을까요?

미리 감사합니다

저도 같은 오류가 발생했습니다. 여기 DB 설정에서 포트가 로드되지 않는 것 같습니다: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

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

설정에는 포트가 없지만, 코드는 포트가 존재한다고 가정하고 있습니다: discourse/script/bulk_import/discourse_merger.rb at main · discourse/discourse · GitHub

코어에서 이 문제가 수정될 때까지, 포트 값을 수동으로 지정하면 됩니다. 즉,

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

대신 다음을 사용하세요:

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

감사합니다, 감사합니다, 감사합니다

포트 = 5432로 시도해 보았는데, 포트 = 5432는 아니었습니다.

머리를 핸들바에 박고 있으니 놓치는 게 있네요.

다시 한번 감사합니다

@McFly 님, 완벽한 가이드를 만들어 주셔서 감사합니다. 정말 도움이 됩니다. 이 모든 단계를 자동화할 수 있을까요? 그리고 크론 작업을 만들어 줄 수 있을까요?

안녕하세요,

보통 이런 스탬프는 반복해서 찍지 않아야 하는 것이므로, 이번에도 찍는 것이 도움이 될지 잘 모르겠습니다.