تحرير/ملخص: ActiveRecord::Base.connection_pool.db_config.configuration_hash يحتوي على اسم المستخدم في user، وليس username، لكن Discourse يبحث عنه في username.
طلب سحب بسيط: FIX: backup_restore.rb wants db user from user, not username by pfaffman · Pull Request #28229 · discourse/discourse · GitHub
…
لدي مثيل متعدد المواقع يستخدم قاعدة بيانات PostgreSQL المستضافة من Digital Ocean. إنها تعمل بشكل جيد ولكن عندما أحاول النسخ الاحتياطي، أحصل على خطأ يفيد بأن
[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",