Много проблем: вошедшие сотрудники не могут открыть темы, ручное обновление не работает, карточки пользователей не открываются, стандартный вход не работает

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

  1. Обновления через командную строку не удаются.
    1. Я пробовал удалить все расширения, но это не помогло.

    2. Я создал новый экземпляр, скопировал резервную копию старого и восстановил её через командную строку. Процесс завершился ошибками:

      ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
      DETAIL:  Key (path, incoming_domain_id)=(/m/search, 18) is duplicated.
      EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(/m/search, 18) is duplicated.
      /var/www/discourse/lib/backup_restore/database_restorer.rb:87:in `restore_dump'
      /var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
      /var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
      script/discourse:145:in `restore'
      /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run'
      /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command'
      /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch'
      /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start'
      script/discourse:286:in `<top (required)>'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:63:in `load'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:63:in `kernel_load'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:28:in `run'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:494:in `exec'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:30:in `dispatch'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:24:in `start'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/exe/bundle:49:in `block in <top (required)>'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
      /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/exe/bundle:37:in `<top (required)>'
      /usr/local/bin/bundle:23:in `load'
      /usr/local/bin/bundle:23:in `<main>'
      Trying to rollback...
      Rolling back...
      Cleaning stuff up...
      Dropping functions from the discourse_functions schema...
      Removing tmp '/var/www/discourse/tmp/restores/default/2021-08-30-124350' directory...
      Unpausing sidekiq...
      Marking restore as finished...
      Notifying 'system' of the end of the restore...
      Finished!
      [FAILED]
      Restore done.
      
    3. Затем я выполнил ./launcher rebuild app, чтобы проверить, работает ли что-то, но получил аналогичные сообщения об ошибках:

      rake aborted!
      StandardError: An error has occurred, this and all later migrations canceled:
      
      ERROR:  unsupported Unicode escape sequence
      DETAIL:  \u0000 cannot be converted to text.
      

      и

      FAILED
      --------------------
      Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with 
      return #<Process::Status: pid 4162 exit 1>
      Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
      exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
      c618c071d6a0240d55ce704cedd63d2ee4cf1df589810d2130049a78b69f327e
      
    4. Я также запустил discourse-doctor, но это не помогло.

  2. Мы не можем войти в систему с помощью имени пользователя и пароля — появляется ошибка.
    1. Работают только другие методы входа (GitHub, Google и т. д.).
  3. Карточки пользователей не отображаются. Если нажать на имя пользователя, карточка пытается появиться на мгновение, но не может.
    1. При переходе на страницу профиля пользователя (например, открыв её в новой вкладке) появляется ошибка «Ой, эта страница не существует».
    2. Когда пользователь пытается просмотреть свои настройки, сообщения и т. д., ему также показывается страница ошибки «Ой».
    3. Мы видим другие настройки пользователя через административный интерфейс, но не можем изменить настройки, например, в интерфейсе или аватаре пользователя.
  4. Администраторы не могут просматривать темы или главную страницу.
    1. Сайт можно нормально просматривать в режиме без авторизации.
    2. Другие пользователи могут входить в систему и взаимодействовать с форумом (создавать темы, ответы и т. д.).
    3. Если мы входим как администратор, нас встречает сообщение об ошибке:

      Ой

      Программное обеспечение, управляющее этим форумом, столкнулось с неожиданной проблемой. Приносим извинения за неудобства.

      Подробная информация об ошибке была записана в логи, и было автоматически сгенерировано уведомление. Мы разберёмся с этим.

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

Любая помощь будет оценена. Если у вас есть идеи, как исправить эти проблемы, или способ создать новый экземпляр с рабочей резервной копией, пожалуйста, дайте знать.

Посмотрите это решение для похожей (хотя и иной) проблемы: Duplicate data explorer key blocking rebuild

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

@merefield, у меня нет исчерпывающих знаний, поэтому я проверил с помощью Data Explorer: в таблице incoming_referers есть столбец incoming_domain_id типа integer, который является внешним ключом для incoming_domains. Мне стоит работать с этим? Если да, то как это проверить?

Это выглядит настолько запутанно, что, если вы не уверены в себе и данные критически важны, я бы рекомендовал привлечь опытного SA для помощи в восстановлении всего Marketplace

Вы уже разобрались с проблемами?