Ошибка при обновлении с Beta 3.1.x до последней версии

Обновление проводилось примерно каждые 2–3 дня, и последнее обновление прошло успешно.

Сегодня обновление через URL /admin/upgrade сначала не удалось.

Затем я сделал обычное:

cd /var/discourse
sudo git pull
sudo ./launcher rebuild app

Это также привело к ошибке:

/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Задачи: TOP => db:migrate
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)
I, [2023-01-20T15:27:00.834259 #1]  INFO -- : == 20230118020114 AddPublicTopicCountToTags: миграция ========================
-- add_column(:tags, :public_topic_count, :integer, {:default=>0, :null=>false})
   -> 0.0138s
-- execute("UPDATE tags t\nSET public_topic_count = x.topic_count\nFROM (\n  SELECT\n    COUNT(topics.id) AS topic_count,\n    tags.id AS tag_id\n  FROM tags\n  INNER JOIN topic_tags ON tags.id = topic_tags.tag_id\n  INNER JOIN topics ON topics.id = topic_tags.topic_id AND topics.deleted_at IS NULL AND topics.archetype != 'private_message'\n  INNER JOIN categories ON categories.id = topics.category_id AND NOT categories.read_restricted\n  GROUP BY tags.id\n) x\nWHERE x.tag_id = t.id\nAND x.topic_count <> t.public_topic_count;\n")

I, [2023-01-20T15:27:00.834823 #1]  INFO -- : Завершение асинхронных процессов
I, [2023-01-20T15:27:00.834868 #1]  INFO -- : Отправка INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-01-20T15:27:00.835173 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
2023-01-20 15:27:00.835 UTC [42] LOG:  получен запрос на быстрое завершение работы
103:signal-handler (1674228420) Получен SIGTERM, планирование завершения работы...
2023-01-20 15:27:00.849 UTC [42] LOG:  прерывание любых активных транзакций
2023-01-20 15:27:00.851 UTC [42] LOG:  фоновый рабочий "запуск логической репликации" (PID 51) завершился с кодом выхода 1
2023-01-20 15:27:00.855 UTC [46] LOG:  завершение работы
2023-01-20 15:27:00.901 UTC [42] LOG:  система баз данных завершена
103:M 20 Jan 2023 15:27:00.905 # Пользователь запросил завершение работы...
103:M 20 Jan 2023 15:27:00.905 * Сохранение финального снимка RDB перед выходом.
103:M 20 Jan 2023 15:27:00.950 * База данных сохранена на диск
103:M 20 Jan 2023 15:27:00.950 # Redis теперь готов к выходу, пока...


ОШИБКА
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' завершилось с ошибкой, код возврата #<Process::Status: pid 390 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
Выполнение не удалось с параметрами {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Загрузка не удалась с кодом выхода 1
** ЗАГРУЗКА НЕ УДАЛАСЬ ** Пожалуйста, прокрутите вверх и найдите более ранние сообщения об ошибках; их может быть несколько.
./discourse-doctor может помочь в диагностике проблемы.
37cbe5dc5c82e0a41e9e1deea5b99f5e643bfe6bcd53d52c38e3e855a85ed81e

Прокрутив ещё выше, я вижу запись:

PG::UniqueViolation: ОШИБКА:  дублирующееся значение ключа нарушает уникальное ограничение "index_tags_on_name"
ДЕТАЛИ:  Ключ (name)=(net) уже существует.

Я совершенно не знаю, как исправить/разрешить эту проблему.

Мой форум теперь недоступен. Я снова запустил sudo ./launcher rebuild app. Это тоже не удалось.

Не мог бы кто-нибудь помочь с предложениями по решению проблемы?

Пожалуйста, выполните команду ./launcher start app, чтобы перезагрузить старое изображение. Это может вернуть ваш форум в онлайн.

Большое спасибо.

Контейнер снова запущен, но ошибка сохраняется.

Скорее всего, у меня та же проблема, что и здесь:

Я не буду пытаться решить её тем же способом, который описан там.

Обновление 1 — Решение

Хорошо, кажется, мне удалось решить проблему следующими шагами:

  1. Отредактировал файл app.yaml и выполнил:
  2. Пересобрал образ.
  3. Активировал и запустил плагин Data Explorer, затем использовал этот запрос для выявления дублирующихся тегов.
  4. Через стандартный административный интерфейс нашёл теги. Затем переименовал один из них, чтобы он снова стал уникальным.
  5. Снова убрал фиксацию версии.
  6. Пересобрал Discourse командой sudo ./launcher rebuild app. На этот раз сборка прошла успешно.
  7. После запуска Discourse перешёл в раздел управления тегами и продолжил работу с дубликатами (удалил один из ранее дублирующихся тегов после переназначения другого).