Не удалось выполнить DuplicateColumn и multisite:migrate

Обновление с версии 2.9.0.beta2 до 2.9.0.beta4 завершилось ошибкой: PG::DuplicateColumn: ERROR: column "bookmarkable_id" отношения "bookmarks" уже существует. Рекомендации из Recovering from failed/partially applied upgrade помогли мне снова поднять сервис. Я создаю новую тему, так как эта проблема, похоже, специфична для (запущенного в Docker) многосайтового развертывания.

Проблема, судя по всему, в том, что задача multisite:migrate пытается выполнить ту же миграцию, которая уже была выполнена ранее в рамках других миграций. Результатом стала ошибка PG::DuplicateColumn: ERROR: column "bookmarkable_id" отношения "bookmarks" уже существует. Исходя из сообщения об ошибке, это может быть связано с функцией полиморфных закладок, DEV: Re-add polymorphic bookmark columns by martin-brennan · Pull Request #16261 · discourse/discourse · GitHub (обращаюсь к @martin?).

После возникновения проблемы моим быстрым и неидеальным решением стало:

  1. Закомментировать строку - exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate в конфигурационном файле containers/web_only.yml.
  2. Вручную удалить частично примененные миграции, связанные с закладками: выполнить ./launcher enter data, зайти в обе базы данных Discourse через psql и запустить команду ALTER TABLE bookmarks DROP COLUMN bookmarkable_id, DROP COLUMN bookmarkable_type;.
  3. Перезапустить процесс пересборки: ./launcher rebuild web_only 2>&1.

Чего мне может не хватать сейчас, когда multisite:migrate не был выполнен? Буду признателен за любые мысли. Оба сайта, впрочем, работают. :crossed_fingers:

1 лайк

Тогда, я думаю, что я бы сделал следующее: запустить ещё одно обновление и убедиться, что вы вышли из зоны риска.

Есть какие-то мысли, зачем это нужно? Или подсказки, чего ожидать от запуска миграции для мультисайта? Дело в том, что я не люблю запускать скрипты, которые не понимаю. :slightly_smiling_face:

Потому что вы хотя бы примерно знаете, как это исправить, а к следующему обновлению (если вы хоть немного похожи на меня) вы об этом совершенно забудете. Я почти уверен, что это сработает, так как, насколько я знаю, другие сталкивались с тем же, когда решали эту проблему.

1 лайк

Логично, похоже, что вы никогда не запускали пост-миграцию для удаления столбцов, которые изначально там были, а я удалил их в DEV: Re-add polymorphic bookmark columns by martin-brennan · Pull Request #16261 · discourse/discourse · GitHub. Мне, возможно, просто нужно будет проверять наличие этих столбцов перед их повторным добавлением здесь discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at 037172beaae0743176eee653bd2cd4cd1ce5c7e9 · discourse/discourse · GitHub, для этого я сделаю коммит.

Только что объединил коммит, который должен помочь:

4 лайка