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!

1 curtida

Você pode executar

./launcher start app

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

2 curtidas

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

2 curtidas

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.

1 curtida

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.

2 curtidas

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?

2 curtidas

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
2 curtidas

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.

1 curtida