Ubuntu 16
Clicamos na atualização via web como fizemos várias vezes. falhou, agora o aplicativo não consegue mais reconstituir a versão do Docker não suportada.
Alguma ideia? Eu poderia tentar atualizar o sistema operacional, etc., mas isso leva muito tempo que eu não tinha hoje.
De qualquer forma, é possível voltar?
Tentei definir a versão para o hash antigo, mas imediatamente recebo a mensagem de que a versão do Docker não é suportada ao tentar reconstruir
Eu recomendaria mover para uma nova máquina virtual (VM) e restaurar o banco de dados lá. É mais fácil, tem pouco tempo de inatividade, e se algo der errado, você simplesmente continua usando o servidor que funciona.
Eu atualizei o sistema operacional etc. e passou pelo upgrade do Postgres 15, mas agora, ao fazer rebuild do aplicativo, recebo
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERRO: coluna "require_message" não existe na linha 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse DECLARAÇÃO: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** FALHA NO PLUGIN **
Você não pode iniciar o Discourse devido a esse erro durante a inicialização do plugin:
PG::UndefinedColumn: ERRO: coluna "require_message" não existe
LINHA 1: ..._key, description, notify_type, auto_action_type, require_me...
^
Depois de executar rebuild (após a atualização do Postgres)
Realizando atualização
------------------
Analisando todas as linhas no novo cluster ok
Congelando todas as linhas no novo cluster ok
Excluindo arquivos do novo pg_xact ok
Copiando old pg_xact para o novo servidor ok
Configurando o menor XID para o novo cluster ok
Configurando próximo ID de transação e época para o novo cluster ok
Excluindo arquivos do novo pg_multixact/offsets ok
Copiando old pg_multixact/offsets para o novo servidor ok
Excluindo arquivos do novo pg_multixact/members ok
Copiando old pg_multixact/members para o novo servidor ok
Configurando próximo ID de multixact e deslocamento para o novo cluster ok
Redefinindo arquivos WAL ok
Configurando os counters frozenxid e minmxid no novo cluster ok
Restaurando objetos globais no novo cluster ok
Restaurando esquemas do banco de dados no novo cluster ok
Copiando arquivos de relação do usuário ok
Configurando próximo OID para o novo cluster ok
Sincronizando dados no disco ok
Criando script para excluir o antigo cluster ok
Verificando atualizações de extensão aviso
Sua instalação contém extensões que devem ser atualizadas
com o comando ALTER EXTENSION. O arquivo
update_extensions.sql
quando executado pelo psql pelo superusuário do banco de dados, atualizará
essas extensões.
Atualização concluída
----------------
As estatísticas do otimizador não são transferidas pelo pg_upgrade.
Após iniciar o novo servidor, considere rodar:
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
Executar esse script excluirá os arquivos de dados do antigo cluster:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES CONCLUÍDA
O banco de dados antigo 13 está armazenado em /shared/postgres_data_old
Para concluir a atualização, reconstrua novamente usando:
./launcher rebuild app
Posso fazer algo? Não tenho certeza de como a coluna está faltando.
Não tenho certeza de como fazer isso, mais especificamente a qual tabela etc. Existe alguma informação sobre isso que eu possa encontrar? Encontrei aquele post que você mencionou, mas não havia detalhes específicos.
Nem consigo montar o banco de dados o suficiente para adicionar a coluna. Vou tentar desativar todos os plugins e ver se consigo pelo menos iniciar o container.
Ok, eis como conseguimos consertar (Não é para os fracos de coração)
Atualize o Ubuntu para uma versão que suporte Docker 20+
Estávamos no Ubuntu 16, tive que ir para pelo menos o Ubuntu 20, então fizemos essa atualização duas vezes
Assim que o banco de dados foi atualizado com sucesso, executamos
./launcher rebuild app
Isso gerou um erro sobre coluna ausente
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** FALHA NO PLUGIN **
Você não pode iniciar o Discourse devido a este erro durante a inicialização do plugin:
PG::UndefinedColumn: ERROR: column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
^
Neste ponto, não há como iniciar o contêiner, então fui ao app.yml e desabilitei todos os plugins, em seguida, executei o rebuild novamente
O aplicativo finalmente foi reconstruído, então pude entrar no console do rails para adicionar a coluna acima manualmente.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
Assim que a coluna estava presente, voltei ao app.yml, habilitei todos os plugins e fiz um rebuild novamente
O rebuild foi bem-sucedido… e estamos online!
Obrigado @pfaffman pela sua pronta resposta, mesmo no fim de semana. Vamos criar um novo droplet atualizado e migrar. Esta deveria ser uma atualização rápida no local pela interface web. Mas acho que o script não testa a compatibilidade do docker. Quando ele atualizou o discourse docker, ele lançou um erro de docker incompatível.
Isso foi totalmente culpa nossa por estarmos em uma versão tão antiga do Ubuntu 16. Uma das coisas boas e ruins de um sistema estável é que ele tende a perdurar.