EDITAR/Tl;dr: ActiveRecord::Base.connection_pool.db_config.configuration_hash tiene el nombre de usuario en user, no en username, pero Discourse lo busca en username.
PR trivial: FIX: backup_restore.rb wants db user from user, not username by pfaffman · Pull Request #28229 · discourse/discourse · GitHub
…
Tengo una instancia multisitio usando postgres alojado de Digital Ocean. Funciona bien, pero cuando intento hacer una copia de seguridad, obtengo un error que dice
[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"
Pero el usuario no es discourse. Está usando el usuario correcto en otros lugares, incluyendo ActiveRecord::Base.connection_pool.db_config.configuration_hash y BackupRestore.database_configuration (cuando ejecuto esos comandos en RAILS_DB=sitename rails c). PG_USER no está configurado en el entorno (que yo pueda ver).
Parece que esto es lo que lo causa:
Lo edité en el contenedor (para sacarlo de DISCOURSE_DB_USER, lo que parecía una buena idea en ese momento) y la copia de seguridad funciona ahora. No sé si se supone que se puede extraer la información de conexión de multisite.yml o no, pero ignorar DB_USER parece incorrecto.
¿O tal vez solo debería hacer que el usuario sea discourse como supongo que todos los demás deben estar haciendo?
EDITAR: Espera. No.
config['username'] debería ser config['user']
config = ActiveRecord::Base.connection_pool.db_config.configuration_hash
¡devuelve esto!
=> {: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}
Entonces
config["username"] || username || ENV["USER"] || "postgres",
debería ser
config["user"] || username || ENV["USER"] || "postgres",