EDIT/Tl;dr: ActiveRecord::Base.connection_pool.db_config.configuration_hash hat den Benutzernamen in user und nicht in username, aber Discourse sucht danach unter username.
Trivialer PR: FIX: backup_restore.rb wants db user from user, not username by pfaffman · Pull Request #28229 · discourse/discourse · GitHub
…
Ich habe eine Multisite-Instanz mit Digital Oceans gehostetem Postgres. Es funktioniert einwandfrei, aber wenn ich versuche, ein Backup zu erstellen, erhalte ich eine Fehlermeldung, dass
[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"
Aber der Benutzer ist nicht discourse. Er verwendet den richtigen Benutzer an anderen Stellen, einschließlich ActiveRecord::Base.connection_pool.db_config.configuration_hash und BackupRestore.database_configuration (wenn ich diese Befehle in RAILS_DB=sitename rails c ausführe). PG_USER ist nicht in der Umgebung gesetzt (soweit ich sehen kann).
Es sieht so aus, als wäre das schuld:
Ich habe es im Container bearbeitet (um es aus DISCOURSE_DB_USER zu ziehen, was damals eine gute Idee schien) und das Backup funktioniert jetzt. Ich weiß nicht, ob man Verbindungsinformationen aus multisite.yml ziehen soll oder nicht, aber das Ignorieren von DB_USER scheint falsch zu sein.
Oder sollte ich den Benutzer einfach discourse nennen, wie es anscheinend alle anderen tun?
EDIT: Moment. Nein.
config['username'] sollte config['user'] sein
config = ActiveRecord::Base.connection_pool.db_config.configuration_hash
gibt das zurück!
=> {: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}
Also
config["username"] || username || ENV["USER"] || "postgres",
sollte sein
config["user"] || username || ENV["USER"] || "postgres",