EDIT/Tl;dr : ActiveRecord::Base.connection_pool.db_config.configuration_hash contient le nom d’utilisateur dans user, pas username, mais Discourse le recherche dans username.
PR trivial : FIX: backup_restore.rb wants db user from user, not username by pfaffman · Pull Request #28229 · discourse/discourse · GitHub
…
J’ai une instance multisite utilisant le postgres hébergé de Digital Ocean. Cela fonctionne bien, mais lorsque j’essaie de sauvegarder, j’obtiens une erreur qui dit :
[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"
Mais l’utilisateur n’est pas discourse. Il utilise le bon utilisateur ailleurs, y compris ActiveRecord::Base.connection_pool.db_config.configuration_hash et BackupRestore.database_configuration (lorsque j’exécute ces commandes dans RAILS_DB=sitename rails c). PG_USER n’est pas défini dans l’environnement (d’après ce que je peux voir).
Il semble que ce soit la cause :
Je l’ai modifié dans le conteneur (pour le tirer de DISCOURSE_DB_USER, ce qui semblait une bonne idée à l’époque) et la sauvegarde fonctionne maintenant. Je ne sais pas si vous êtes censé pouvoir extraire les informations de connexion de multisite.yml ou non, mais ignorer DB_USER semble faux.
Ou peut-être devrais-je simplement faire en sorte que l’utilisateur soit discourse comme tout le monde le fait, je suppose ?
EDIT : Attendez. Non.
config['username'] devrait être config['user']
config = ActiveRecord::Base.connection_pool.db_config.configuration_hash
renvoie ceci !
=> {: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}
Donc
config["username"] || username || ENV["USER"] || "postgres",
devrait être
config["user"] || username || ENV["USER"] || "postgres",