以前は成功していたにもかかわらず、2つのフォーラムをマージする際にPG::ConnectionBadの問題が発生

こんにちは。

4月にテストサーバーで2つのフォーラムのマージを正常に完了しましたので、今回、本番環境で2つのフォーラムをマージすることにしました。

当時の手順に従ったところ、マージスクリプトを実行する際に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月にも機能しました(このトピックを参照)。

  • 2つのフォーラムの最新のバックアップから開始します。
  • Discourseをインストールします。
  • 2つのバックアップをインポートします。
  • 保持するフォーラムを復元します。

SSHで:

  • /var/discourseフォルダに移動します。
  • appに入るには./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
OLDバックアップをコマンド tar xvzf old.forum.tar.gz で展開します。

BDD.luからBDD copymeへのコピー。

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

discourseユーザーを終了します。

exit

依存関係

nano, sqlite3, mysql2の依存関係
(rootユーザーで/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 ./..

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

Translated with www.DeepL.com/Translator (free version)
「いいね!」 1

こんにちは。

Postgresはポート5432を使用します(psqlコマンドで \\conninfo で確認できます)が、残念ながら connection.rb ファイルではポート5433が呼び出されています。

パスワードは psql postgres://postgres:password@127.0.0.1:5432 コマンドで確認済みで、問題ありません。

ポートにエラーがないか確認していただけますでしょうか?

よろしくお願いします。

「いいね!」 1

同じエラーが発生しました。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)
「いいね!」 1

ありがとうございます、ありがとうございます、ありがとうございます

ポートを 5432 で試しましたが、5432 ではだめでした。

ハンドルバーに頭を突っ込んでいると、物事を見逃してしまいます。

重ねてお礼申し上げます。

「いいね!」 2

@McFly、完全なガイドをまとめてくれてありがとう。これは役立ちます。これらの手順はすべて自動化できますか?そして、それのためにcronジョブを作成しますか?

「いいね!」 1

こんにちは。

通常は繰り返すべきではない汚れだと知っていますが、役に立つかどうかはわかりません。

「いいね!」 2

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