Я попытался обновить свой экземпляр Discourse, но из-за нескольких проблем, похоже, это завершилось неудачей в частично применённом состоянии. При запуске ./launcher rebuild app я получаю следующее сообщение об ошибке, которое, на мой взгляд, указывает на миграцию, которая уже была (частично) применена:
I, [2022-03-24T21:13:16.043071 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: Произошла ошибка, и эта и все последующие миграции отменены:
PG::DuplicateColumn: ERROR: столбец "bookmarkable_id" отношения "bookmarks" уже существует
Буду признателен за любые рекомендации: есть ли способ восстановиться после этого (или мне нужно решиться и выполнить чистую установку)? Спасибо!
У меня была похожая проблема, но, похоже, моё решение вам не поможет.
Вы не установили SKIP_POST_DEPLOYMENT_MIGRATIONS в вашем app.yml? Если да, то вам нужно выполнить миграцию базы данных с этим параметром, установленным в ноль, а затем пересобрать приложение, но, думаю, дело не в этом.
Вот что я думал. Значит, может быть реальная проблема, связанная с возможностью миграции от одной конкретной точки до текущей. Но этого не должно происходить.
Я очистил все таблицы, которые вызывали ошибки (по одной; в итоге их оказалось 7), пока не смог пересобрать приложение без ошибок.
В вашем случае, похоже, проблема в столбце:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
Возможно, стоит выяснить, к какой таблице он относится, чтобы очистить её, либо просто удалить этот столбец.
Думаю, проблема в том, что при частичном переносе данные эти таблицы уже созданы, поэтому попытка создать их снова вызывает ошибку. Может быть, стоит добавить условие в этот процесс, чтобы избежать ошибок? (Я не эксперт) @pfaffman
Похоже, вы хотите удалить столбец bookmarkable_id из таблицы bookmarks. После того как вы зайдёте в контейнер и в postgres следующим образом:
cd /var/discourse
./launcher enter app
su - postgres
psql
вы выполните:
ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id;
DROP COLUMN bookmarkable_type;
Однако, если форум работает, не помешает сделать резервную копию только базы данных. Если форум не работает, вы можете создать резервную копию с помощью команды discourse backup после строки enter app выше.
Не могли бы вы выполнить ./launcher start app и проверить установленную версию на https://your.domain/admin, чтобы я мог повторить ваши действия. Есть ли какие-то плагины?
Это кажется вероятным решением. Вы должны иметь возможность обновиться до этой версии, и, возможно, тогда сможете перейти на текущую? Что-то в этом роде имеет для меня смысл.