Восстановление резервной копии не выполняется в чистой среде разработки Docker: FATAL: Ошибка аутентификации Peer для пользователя «postgres»

Привет, в руководстве для начинающих по установке Discourse для разработки с использованием Docker в некоторых комментариях упоминается эта проблема, которая, по моему мнению, на самом деле является ошибкой, и её следует зарегистрировать как таковую здесь. Поправьте меня, если я не прав.

Я обычно создаю копию продакшн-окружения для тестирования крупных изменений конфигурации и не раз начинал с чистого листа именно так. Однако теперь резервное копирование завершается с ошибкой, связанной с неудачей аутентификации по пировому методу.

Для контекста, вот что я делаю (возможно, неправильно):

  1. Полностью удаляю локальную директорию discourse.
  2. Останавливаю и удаляю все контейнеры.
  3. Начинаю заново: клонирую репозиторий discourse, а также сразу после этого устанавливаю используемые мной плагины в директорию plugins.
  4. Выполняю команды boot_dev --init, при необходимости запускаю bundle install и миграцию базы данных.
  5. Вхожу под тестовой учетной записью администратора и загружаю резервную копию, скачанную с моего рабочего сайта.
  6. Нажимаю «Восстановить резервную копию».

Дайте знать, если я могу предоставить дополнительную информацию. Логи резервного копирования приведены ниже. И да, я проверил файл pg_hba.conf в папке data/postgres/ — все методы аутентификации там установлены в значение «trust».

[2021-11-03 20:55:35] 'koen' начал восстановление!
[2021-11-03 20:55:35] Помечаем восстановление как запущенное...
[2021-11-03 20:55:35] Проверяем существование /src/tmp/restores/default/2021-11-03-205535...
[2021-11-03 20:55:35] Копируем архив во временную директорию...
[2021-11-03 20:55:35] Распаковываем файл дампа...
[2021-11-03 20:55:36] Проверяем метаданные...
[2021-11-03 20:55:36]   Текущая версия: 20211022154420
[2021-11-03 20:55:36]   Версия для восстановления: 20211022154420
[2021-11-03 20:55:36] Включаем режим только для чтения...
[2021-11-03 20:55:36] Приостанавливаем Sidekiq...
[2021-11-03 20:55:36] Ждём до 60 секунд завершения выполнения заданий Sidekiq...
[2021-11-03 20:55:42] Создаём отсутствующие функции в схеме discourse_functions...
[2021-11-03 20:55:42] Восстанавливаем файл дампа... (это может занять время)
[2021-11-03 20:55:42] psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Неудача аутентификации по пировому методу для пользователя "postgres"
[2021-11-03 20:55:42] ИСКЛЮЧЕНИЕ: psql не удался: psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Неудача аутентификации по пировому методу для пользователя "postgres"
[2021-11-03 20:55:42] /src/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/src/lib/backup_restore/database_restorer.rb:26:in `restore'
/src/lib/backup_restore/restorer.rb:51:in `run'
/src/script/spawn_backup_restore.rb:23:in `restore'
/src/script/spawn_backup_restore.rb:36:in `block in <main>'
/src/script/spawn_backup_restore.rb:4:in `fork'
/src/script/spawn_backup_restore.rb:4:in `<main>'
[2021-11-03 20:55:42] Попытка отката...
[2021-11-03 20:55:42] Откат не потребовался
[2021-11-03 20:55:42] Очистка временных файлов...
[2021-11-03 20:55:42] Удаляем функции из схемы discourse_functions...
[2021-11-03 20:55:42] Удаляем временную директорию '/src/tmp/restores/default/2021-11-03-205535'...
[2021-11-03 20:55:42] Возобновляем работу Sidekiq...
[2021-11-03 20:55:42] Помечаем восстановление как завершенное...
[2021-11-03 20:55:42] Уведомляем 'koen' об окончании восстановления...
[2021-11-03 20:55:46] Готово!
1 лайк

Всем привет, просто хочу уточнить: считается ли это багом и примут ли его как таковой? Стоит ли мне оформить отчет иначе или добавить больше информации? Меня интересует только следующий шаг, я не настаиваю на какой-либо дате решения проблемы.

Всем привет, спустя пару недель я решил попробовать ещё раз. Я полностью очистил систему, настроил и вошёл в свежую среду разработки на локальной машине. Затем добавил плагины, чтобы она соответствовала моим производственным настройкам. Загрузил резервную копию с рабочего сайта и попытался восстановить её в среде DTA. Увы, та же ошибка.

Кто-нибудь может воспроизвести это? Когда-то у меня работала нативная среда разработки, но я от неё отказался, когда оценил удобство настройки через Docker. Не может ли что-то из того старого окружения мешать? Возможно, проблема связана с бывшей локальной платформой базы данных PostgreSQL? Может ли это влиять друг на друга, если чистая установка работает через Docker? Просто предположения. Кто-нибудь может направить меня в правильном направлении или подсказать нужных людей? Создание копии рабочего сайта для тестирования — довольно важный сценарий, я так думаю? Что я могу сделать, чтобы предоставить больше информации? В данный момент запускаю автоматические тесты, но они тоже ничего не дают…

[2021-11-29 19:43:39] 'koen' начал восстановление!
[2021-11-29 19:43:39] Пометка восстановления как запущенного...
[2021-11-29 19:43:39] Проверка существования /src/tmp/restores/default/2021-11-29-194339...
[2021-11-29 19:43:39] Копирование архива во временный каталог...
[2021-11-29 19:43:39] Распаковка файла дампа...
[2021-11-29 19:43:40] Валидация метаданных...
[2021-11-29 19:43:40]   Текущая версия: 20211124161346
[2021-11-29 19:43:40]   Версия для восстановления: 20211123033311
[2021-11-29 19:43:40] Включение режима только для чтения...
[2021-11-29 19:43:40] Приостановка Sidekiq...
[2021-11-29 19:43:40] Ожидание завершения Sidekiq выполнения задач (до 60 секунд)...
[2021-11-29 19:43:46] Создание отсутствующих функций в схеме discourse_functions...
[2021-11-29 19:43:46] Восстановление файла дампа... (это может занять время)
[2021-11-29 19:43:47] psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Ошибка аутентификации по пиру для пользователя "postgres"
[2021-11-29 19:43:47] ИСКЛЮЧЕНИЕ: psql не удался: psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Ошибка аутентификации по пиру для пользователя "postgres"

[2021-11-29 19:43:47] /src/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/src/lib/backup_restore/database_restorer.rb:26:in `restore'
/src/lib/backup_restore/restorer.rb:51:in `run'
/src/script/spawn_backup_restore.rb:23:in `restore'
/src/script/spawn_backup_restore.rb:36:in `block in <main>'
/src/script/spawn_backup_restore.rb:4:in `fork'
/src/script/spawn_backup_restore.rb:4:in `<main>'
[2021-11-29 19:43:47] Попытка отката...
[2021-11-29 19:43:47] Откат не потребовался
[2021-11-29 19:43:47] Очистка временных данных...
[2021-11-29 19:43:47] Удаление функций из схемы discourse_functions...
[2021-11-29 19:43:47] Удаление временного каталога '/src/tmp/restores/default/2021-11-29-194339'...
[2021-11-29 19:43:47] Возобновление работы Sidekiq...
[2021-11-29 19:43:47] Пометка восстановления как завершенного...
[2021-11-29 19:43:47] Уведомление 'koen' об окончании восстановления...
[2021-11-29 19:43:51] Готово!

Кoen

Что ж, d/rake autospec выявил 14 сбоев, первые 6 из которых, похоже, связаны с проблемой аутентификации PEER.

Мне не совсем понятно, что происходит, но я решил опубликовать это здесь на случай, если кто-то сможет разобраться. Похоже на одну и ту же ошибку, но с разными версиями PostgreSQL каждый раз.

Надеюсь, это поможет.

Сбои:

  1) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 9.5
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:61:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'

  2) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 9.3
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:51:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'

  3) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 12
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:74:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'

  4) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 11
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:70:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'

  5) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 9.5.5
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:56:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'

  6) BackupRestore::DatabaseRestorer#restore с реальным psql восстанавливает из PostgreSQL 10
     Ошибка ожидания: raise DatabaseRestoreError.new("psql failed: #{last_line}") if Process.last_status&.exitstatus != 0
     
     BackupRestore::DatabaseRestoreError:
       psql failed: psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  Peer authentication failed for user "postgres"                                                                                        
     # ./lib/backup_restore/database_restorer.rb:92:in `restore_dump'
     # ./lib/backup_restore/database_restorer.rb:26:in `restore'
     # ./spec/lib/backup_restore/shared_context_for_backup_restore.rb:59:in `execute_stubbed_restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:41:in `restore'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:45:in `expect_restore_to_work'
     # ./spec/lib/backup_restore/database_restorer_spec.rb:66:in `block (4 levels) in <main>'
     # ./spec/rails_helper.rb:284:in `block (2 levels) in <top (required)>'


Тоже наблюдаю это, те же обстоятельства. И через UI, и через терминал.

Полный вывод ниже. Это выполняется в среде WSL2 на Windows.

Есть какие-то идеи?

$ d/discourse restore ragdoll-forums-2022-03-27-000005-v20220215015538.tar.gz
Запуск восстановления: ragdoll-forums-2022-03-27-000005-v20220215015538.tar.gz
[НАЧАЛО]
'system' начал восстановление!
Помечаем восстановление как запущенное...
Проверяем существование /src/tmp/restores/default/2022-03-28-104731...
Копируем архив во временную директорию...
Распаковываем архив, это может занять время...
Извлекаем файл дампа...
Проверяем метаданные...
  Текущая версия: 20220325064954
  Версия для восстановления: 20220215015538
Включаем режим только для чтения...
Приостанавливаем Sidekiq...
Ждем до 60 секунд завершения выполнения заданий Sidekiq...
Создаем отсутствующие функции в схеме discourse_functions...
Восстанавливаем файл дампа... (это может занять время)
psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Ошибка аутентификации по пирингу для пользователя "postgres"
ИСКЛЮЧЕНИЕ: psql не удался: psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  Ошибка аутентификации по пирингу для пользователя "postgres"
/src/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/src/lib/backup_restore/database_restorer.rb:26:in `restore'
/src/lib/backup_restore/restorer.rb:51:in `run'
script/discourse:149:in `restore'
/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'
script/discourse:290:in `<main>'
Пытаемся откатиться...
Откат не требовался
Очищаем временные файлы...
Удаляем функции из схемы discourse_functions...
Удаляем временную директорию '/src/tmp/restores/default/2022-03-28-104731'...
Возобновляем работу Sidekiq...
Помечаем восстановление как завершенное...
Уведомляем 'system' об окончании восстановления...
Готово!
[ОШИБКА]
Восстановление завершено.
Не удалось сообщить об ошибке: не удалось выделить поток 0   PostSearchData Upsert (1.1ms)  INSERT INTO "post_search_data" ("raw_data","post_id","locale","version","search_data","private_message") VALUES ('Восстановление не удалось. Вот лог: [2022-03-28 10:47:31] [НАЧАЛО] [2022-03-28 10:47:31] 'system' начал восстановление! [2022-03-28 10:47:31] Помечаем восстановление как запущенное... [2022-03-28 10:47:31] Проверяем существование /src/tmp/restores/default/2022-03-28-104731... [2022-03-28 10:47:31] Копируем архив во временную директорию... [2022-03-28 10:47:31] Распаковываем архив, это может занять время... [2022-03-28 10:47:31] Извлекаем файл дампа... [2022-03-28 10:47:32] Проверяем метаданные... [2022-03-28 10:47:32] Текущая версия: 20220325064954 [2022-03-28 10:47:32] Версия для восстановления: 20220215015538 [2022-03-28 10:47:32] Включаем режим только для чтения... [2022-03-28 10:47:32] Приостанавливаем Sidekiq... [2022-03-28 10:47:32] Ждем до 60 секунд завершения выполнения заданий Sidekiq... [2022-03-28 10:47:38] Создаем отсутствующие функции в схеме discourse_functions... [2022-03-28 10:47:38] Восстанавливаем файл дампа... (это может занять время) [2022-03-28 10:47:38] psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL : Ошибка аутентификации по пирингу для пользователя "postgres" [2022-03-28 10:47:38] ИСКЛЮЧЕНИЕ: psql не удался: psql: ошибка: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL: Ошибка аутентификации по пирингу для пользователя "postgres" [2022-03-28 10:47:38] /src/lib/backup_restore/database_restorer.rb:92:in `restore_dump'' /src/lib/backup_restore/database_restorer.rb:26:in `restore'' /src/lib/backup_restore/restorer.rb:51:in `run'' script/discourse:149:in `restore'' /usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'' /usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'' /usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'' /usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/base.rb:485:in `start'' script/discourse:290:in ` < main > '' [2022-03-28 10:47:38] Пытаемся откатиться... [2022-03-28 10:47:38] Откат не требовался [2022-03-28 10:47:38] Очищаем временные файлы... [2022-03-28 10:47:38] Удаляем функции из схемы discourse_functions... [2022-03-28 10:47:38] Удаляем временную директорию ''/src/tmp/restores/default/2022-03-28-104731''... [2022-03-28 10:47:38] Возобновляем работу Sidekiq... [2022-03-28 10:47:38] Помечаем восстановление как завершенное... [2022-03-28 10:47:38] Уведомляем ''system'' об окончании восстановления...', 17, 'en', 4, '''-03'':12,19,30,40,50,61,74,83,91,100,109,118,126,143,157,171,193,218,262,271,283,292,305,315,323,333 ''-28'':13,20,31,41,51,62,75,84,92,101,110,119,127,144,158,172,194,219,263,272,284,293,306,316,324,334 ''/src/lib/backup_restore/database_restorer.rb'':223,228 ''/src/lib/backup_restore/restorer.rb'':232 ''/src/tmp/restores/default/2022-03-28-104731'':47,312 ''/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor.rb'':249 ''/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/base.rb'':253 ''/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/command.rb'':240 ''/usr/local/lib/ruby/gems/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb'':244 ''/var/run/postgresql/.s.pgsql.5432'':183,208 ''10'':14,21,32,42,52,63,76,85,93,102,111,120,128,145,159,173,195,220,264,273,285,294,307,317,325,335 ''127'':245 ''149'':237 ''2022'':11,18,29,39,49,60,73,82,90,99,108,117,125,142,156,170,192,217,261,270,282,291,304,314,322,332 ''20220215015538'':107 ''20220325064954'':98 ''26'':229 ''27'':241 ''290'':258 ''31'':16,23,34,44,54,65,78 ''32'':87,95,104,113,122,130 ''38'':147,161,175,197,222,266,275,287,296,309,319,327,337 ''392'':250 ''47'':15,22,33,43,53,64,77,86,94,103,112,121,129,146,160,174,196,221,265,274,286,295,308,318,326,336 ''485'':254 ''51'':233 ''60'':134 ''92'':224 ''archiv'':56,67 ''authent'':187,212 ''clean'':288 ''command'':248 ''connect'':178,203 ''copi'':55 ''creat'':148 ''current'':96 ''directori'':59,313 ''discours'':153,301 ''dispatch'':252 ''drop'':297 ''dump'':80,163,227 ''enabl'':114 ''end'':342 ''error'':177,202 ''except'':198 ''exist'':48 ''extract'':79 ''fail'':2A,6,184,188,200,209,213 ''fatal'':185,210 ''file'':81,164 ''finish'':139,331 ''function'':150,154,298,302 ''invok'':247 ''job'':141 ''log'':10 ''main'':260 ''make'':45 ''mark'':35,328 ''may'':69,166 ''metadata'':89 ''miss'':149 ''mode'':116 ''need'':279 ''notifi'':338 ''paus'':123 ''peer'':186,211 ''postgr'':191,216 ''psql'':176,199,201 ''readon'':115 ''remov'':310 ''restor'':1A,4,28,36,105,162,226,231,239,329,345 ''rollback'':269,281 ''run'':38,140,235,243 ''schema'':155,303 ''script/discourse'':236,257 ''second'':135 ''server'':180,205 ''sidekiq'':124,137,321 ''socket'':182,207 ''start'':17,26,256 ''stuff'':289 ''sure'':46 ''system'':24,339 ''take'':70,167 ''tmp'':58,311 ''tri'':267 ''unpaus'':320 ''unzip'':66 ''user'':190,215 ''valid'':88 ''version'':97,106 ''wait'':131 ', TRUE) ON CONFLICT ("post_id") DO UPDATE SET "raw_data"=excluded."raw_data","locale"=excluded."locale","version"=excluded."version","search_data"=excluded."search_data","private_message"=excluded."private_message" RETURNING "post_id"
1 лайк

У меня возникли те же проблемы.
Наконец, я применил следующий обходной путь:

   if Rails.env.development?
      username = "discourse"
      password = "discourse"
      config["host"] = "localhost"
      config["port"] = 5432
      config["database"] = "discourse_development"
    end

перед

  DatabaseConfiguration.new(

в файле /lib/backup_restore.rb.

Также мне пришлось установить пароль для пользователя discourse с помощью команды:

d/psql -c "ALTER USER discourse WITH PASSWORD 'discourse';"

Возможно, существуют более изящные способы решения этой задачи.

1 лайк

Спасибо большое! Это очень помогло! :slight_smile:

На мой взгляд, это следует считать #багом.

Низкий приоритет бага, так как он не влияет на продакшн-сайт. И я не думаю, что кто-то из команды в настоящее время использует docker-окружение для разработки. Я изменил категорию темы и добавил тег pr-welcome.

5 лайков

Для меня это работает:

Но есть и несколько других способов исправить это:

  • добавить настройку окружения USER=discourse в образ docker для загрузки

  • добавить -e USER=discourse \ в d\exec

  • добавить это в backup_restore.rb

      if Rails.env.development?
        username = ENV["USER"] || "discourse"
      end
    

Кроме того, при выполнении d/discourse в среде разработки docker возникает новая проблема:

$ d/discourse backup
<internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require': cannot load such file -- thor (LoadError)
        from <internal:/usr/local/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from script/discourse:4:in `<main>'

в то время как d/bundle exec script/discourse backup работает (см. патч).

Привет, @gerhard,

Я столкнулся с той же проблемой, о которой говорится в этой теме, и указанный выше PR решил мою проблему. Я считаю, что этот PR следует снова открыть и объединить.

1 лайк

Этот PR не идеален: мы хотим добавлять пользователя только в том случае, если он явно указан. Принуждение всех окружений разработки к наличию пользователя discourse — это неправильно.

Я согласен обрабатывать эту переменную окружения опционально, если она определена.

2 лайка

Я не использую среду разработки Docker, поэтому не могу это протестировать, но, возможно, это сработает?

--- a/lib/backup_restore.rb
+++ b/lib/backup_restore.rb
@@ -135,7 +135,8 @@ module BackupRestore
     DatabaseConfiguration.new(
       config["backup_host"] || config["host"],
       config["backup_port"] || config["port"],
-      config["username"] || username || ENV["USER"] || "postgres",
+      config["username"] || username || ENV["USER"] || ENV["DISCOURSE_DEV_DB_USERNAME"] ||
+        "postgres",
       config["password"] || password,
       config["database"],
     )

Если это сработает, пожалуйста, создайте PR.

1 лайк

Если мы используем подход с dev-контейнером, достаточно добавить «USER»: «discourse» в секцию «remoteEnv», и это позволит экспортировать базу данных.

1 лайк

Присоединяюсь к этому. На моем экземпляре devcontainer резервное копирование и восстановление заработали только после того, как я добавил это. Спасибо @sreenu_paruchuri

   "remoteEnv": {
     "RAILS_DEVELOPMENT_HOSTS": ".app.github.dev",
+    "USER": "discourse",
     "PGUSER": "discourse",
     "SELENIUM_FORWARD_DEVTOOLS_TO_PORT": "9229",
   },
3 лайка