Olá, pessoal. Esta parece uma pergunta boba, mas vou fazê-la mesmo assim.
Fiquei preso neste loop familiar:
Atualização falhou.
Tentei ./launcher rebuild app, mas não havia espaço em disco suficiente. (Menos de 5 GB livres.)
Executei ./launcher cleanup, que pareceu liberar algum espaço em disco. (Mais de 5 GB livres.)
VOLTE AO PASSO 2.
Como ainda não sei quais operações são seguras (ou seja, não destruirão os dados do meu site), fiquei andando nervosamente, esperando não precisar restaurar de um backup. Acabei fazendo o seguinte e pareceu funcionar para mim:
Executei ./launcher stop app
Executei ./launcher cleanup, que limpou significativamente mais espaço do que antes, o que me deixou imediatamente nervoso.
Executei git pull
Executei ./launcher rebuild app
Isso não só funcionou, mas resultou em um site em funcionamento com os dados intactos e com mais espaço livre do que eu tinha anteriormente, aproximadamente 2 GB.
Agora não tenho certeza se o que fiz foi brilhante, óbvio ou arriscado e apenas aconteceu de funcionar. Gostaria de entender um pouco melhor por que obtive os resultados que obtive e se essa foi uma maneira sensata de atualizar.
O docker cria um monte de arquivos quando constrói um contêiner (incluindo os contêineres que ele constrói) quando você constrói um novo contêiner, você ainda tem os contêineres antigos (e também imagens de disco). É isso que é removido quando você faz uma limpeza.
É um pouco mais seguro executar o comando de limpeza enquanto o discourse está em execução, porque o comando de limpeza não excluirá um contêiner em execução. Se algo der errado com a reconstrução, você ainda poderá reiniciar o contêiner antigo, se ele existir.
Portanto, eu removeria a etapa (1) acima e a etapa (3) é desnecessária porque ./launcher faz um pull (antigamente, não fazia).
Então, sim, se o seu espaço em disco estiver tão apertado que você não tenha espaço para duas imagens, então você precisa destruir todas elas antes de construir uma nova, o que o coloca em uma situação ruim se, por algum motivo, você não conseguir construir uma nova imagem. Nesse caso, você realmente precisa de mais espaço em disco. A coisa mais fácil a fazer é mover backups para o S3.
Estou surpreso com “espaço em disco tão apertado” na minha situação. Eu executo a limpeza, tenho 7,9 GB livres, então executo ./launcher rebuild app e ele se recusa a terminar. 7,9 GB livres quando quero reconstruir o aplicativo é realmente tão pouco?!
(ATUALIZAÇÃO: Agora entendo como isso pode acontecer. Deixo isso aqui para que Curiosos o encontrem em uma pesquisa na web. Por favor, leiam todo este tópico, pessoal!)
Para esta reconstrução específica, você precisou baixar uma nova imagem base
Seria particularmente útil incluir esta informação de alguma forma no processo de atualização, seja como um aviso antecipado “Precisamos baixar uma nova imagem base, então você provavelmente precisa de 3 GB a mais de espaço do que o normal para atualizar. Se ficar sem espaço, é provavelmente por isso.” ou como um erro mais detalhado quando o processo de atualização/reconstrução fica sem espaço. Caso contrário, acabamos em um loop infinito de “Pronto! Há todo o espaço que você (parece) precisar!” (Picard com o braço estendido.)
Também seria particularmente útil não ter que cavar tanto para encontrar a opção de usar ./launcher rebuild app --skip-prereqs quando você quer dizer “Confie em mim, cara. Tenho espaço em disco suficiente.” Sim, coloque avisos em negrito, vermelho, fonte 72.
Esta “nova imagem base que torna a atualização complicada” acontece com pouca frequência para que a esqueçamos, mas causa problemas durante a atualização. Onde é o local apropriado para um artigo sobre isso que centralize o que sabemos sobre como contornar os problemas?