Recuperando de upgrade falho/parcialmente aplicado

Tentei atualizar minha instância do Discourse, no entanto, devido a alguns problemas, parece que falhou em um estado parcialmente aplicado. Ao executar ./launcher rebuild app, recebo a seguinte mensagem de erro, que indica uma migração que já foi (parcialmente) aplicada:

I, [2022-03-24T21:13:16.043071 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Qualquer orientação sobre se há uma maneira de recuperar isso (ou se preciso aceitar e fazer uma nova instalação) seria apreciada. Obrigado!

Você pode executar

./launcher start app

para iniciar o contêiner antigo. Isso o trará de volta.

Sim, estou ciente disso (e já fiz) - no entanto, estou me perguntando qual deveria ser meu próximo passo em relação à atualização.

Ah. Isso não foi útil então :person_shrugging:

Tive um problema semelhante, mas parece improvável que minha solução ajude você.

Você não tem SKIP_POST_DEPLOYMENT_MIGRATIONS definido em seu app.yml, tem? Se sim, você precisa migrar o banco de dados com ele definido como zero e, em seguida, reconstruir, mas não acho que esse seja o seu problema.

Não, não parece.

Era o que eu pensava. Então pode haver um problema real que tem a ver com a capacidade de migrar de um ponto específico para o atual. Mas isso não deveria acontecer.

Veja isto:

Esvaziei todas as tabelas que estavam me dando erros (uma por uma, no final foram 7), até que pude reconstruir o aplicativo sem nenhum erro.

No seu caso, parece que o problema é uma coluna:

PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists

Talvez você devesse procurar a qual tabela ela pertence, para poder esvaziá-la, ou você pode simplesmente remover essa coluna.

Acredito que o problema seja que, ao migrar parcialmente, essas tabelas já são criadas, daí não poder criá-las novamente e retornar um erro. Talvez uma condicional possa ser adicionada a este processo, para que não dê erros? (Não sou um especialista) @pfaffman

Parece certo, @undasein.

Acho que você quer remover a coluna bookmarkable_id da tabela bookmarks. Então, depois de entrar no contêiner e no postgres assim:

cd /var/discourse
./launcher enter app
su - postgres
psql

Então você faria

ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Mas fazer um backup apenas do banco de dados não seria uma má ideia se o fórum estiver em execução. Se não estiver, você pode fazer um backup com discourse backup após a linha enter app acima.

Mesmo problema aqui! Esta é a solução correta a seguir?

Essa foi a minha suposição. Você pode tentar e nos informar.

Não sou experiente em discourse.

@sam alguma ideia de como prosseguir? A instalação e atualização padrão está se mostrando um pesadelo.

O acima é a maneira correta de corrigir este problema?

Obrigado antecipadamente.

infelizmente não funcionou, ainda estou recebendo

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Houve alguma outra ação a ser tomada após esses comandos?

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Obrigado pela sua ajuda

Olá Nick,
Estou tentando reproduzir isso, qual é o commit da sua instância?
Você poderia tentar com

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

no seu app.yml, isso é de 10 dias atrás, pouco antes de refazer um commit revertido que parece ter tido problemas semelhantes.

Manhã Ben,

Seria possível me dar um resumo dos comandos para fazer isso, por favor?

Eu consigo atualizar e tudo mais facilmente, mas esta é a primeira vez que algo dá errado e, para ser honesto, estou totalmente fora da minha zona de conforto, haha.

Você poderia executar ./launcher start app e verificar a versão instalada em https://seu.dominio/admin para que eu possa tentar refazer seus passos. Algum plugin?

Olá Ben,

Versão Instalada: 2.9.0.beta2
(5374e587a3)

Plugins Instalados:
discourse-reactions
docker_manager
styleguide

Obrigado,
Nick

./launcher start app
-bash: ./launcher: No such file or directory
 cd /var/discourse

Antes

./launcher start app

Então, notei que tinha algumas atualizações do Ubuntu, então tudo no servidor está atualizado

tentei novamente e ainda

PG::DuplicateColumn: ERROR:  a coluna "bookmarkable_id" da relação "bookmarks" já existe

Esta parece ser uma solução provável. Você deve ser capaz de atualizar para esta e talvez então conseguir chegar à versão atual? Algo assim faz sentido para mim.