編集/要約: ActiveRecord::Base.connection_pool.db_config.configuration_hash には、username ではなく user にユーザー名が含まれていますが、Discourse は username で検索しています。
…
マルチサイトインスタンスで Digital Ocean のホストされている postgres を使用しています。正常に動作していますが、バックアップしようとすると、次のエラーが発生します。
[2024-08-05 16:13:31] pg_dump: error: connection to server at "private-forum-cluster-postgresql-prod-do-user-1230.j.db.ondigitalocean.com" (10.11.1.6), port 25060 failed: FATAL: password authentication failed for user "discourse"
しかし、ユーザーは discourse ではありません。他の場所でも、ActiveRecord::Base.connection_pool.db_config.configuration_hash や BackupRestore.database_configuration (これらを RAILS_DB=sitename rails c で実行した場合) を含む、正しいユーザーを使用しています。PG_USER は環境変数で設定されていません (私が見る限り)。
これが原因のようです:
コンテナ内でこれを編集しました (当時良い考えだと思った DISCOURSE_DB_USER から取得するように) 、バックアップは現在機能しています。multisite.yml から接続情報を取得できるのかどうかはわかりませんが、DB_USER を無視するのは間違っているように思えます。
それとも、他の皆がやっているように、ユーザーを discourse にすべきなのでしょうか?
編集:いや。
config['username'] は config['user'] であるべきです。
config = ActiveRecord::Base.connection_pool.db_config.configuration_hash
はこれを返します!
=> {:adapter=>"postgresql",
:database=>"theDatabase",
:pool=>25,
:port=>25060,
:timeout=>5000,
:host=>"private-forum-cluster-postgresql-prod-do-user-123-0.j.db.ondigitalocean.com",
:user=>"theCurrentUsername",
:password=>"supersecret",
:host_names=>["forum.example.com"],
:db_key=>"mydb",
:prepared_statements=>false}
なので
config["username"] || username || ENV["USER"] || "postgres",
は
config["user"] || username || ENV["USER"] || "postgres",
であるべきです。