Como posso reconstruir o Discourse sem alterar a versão?

Preciso atualizar as configurações SMTP no app.yml, mas não quero alterar a versão do Discourse.

Quando especifico uma versão pela tag version, a reconstrução falha com o erro abaixo. Atualmente estou na versão 2.4.0.beta8.

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+ failed with return #<Process::Status: pid 336 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"web", "cmd"=>["gem update bundler", "find $home ! -user discourse -exec chown discourse {} \\+"]}
6269af00c2a4671a6fd2cb13a55bd475743205262bae7f483bf468e4dcacbeed
** FAILED TO BOOTSTRAP ** por favor, role para cima e procure por mensagens de erro anteriores; pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.

Isso surge todos os anos e provavelmente deveria ter um tópico #como-fazer. Acabei de pesquisar por versão específica:

Sim, a diferença aqui é que estou usando a tag de versão no YAML, mas recebo um erro ao reconstruir.

Se você precisa apenas alterar as configurações do SMTP, você pode

./launcher destroy app 
./launcher start app

Ok, então isso vai ler o YAML mesmo que não reconstrua, parece bom. Enquanto isso vai resolver meu problema urgente, ainda estou interessado em saber por que a versão não funciona.

Você disse que recebeu “um erro”. Isso significa que você cometeu algum equívoco. Minha melhor suposição é um erro de formatação no YML, mas sem saber qual foi o erro, realmente não há como saber.

Desculpe, “por favor, role para cima e procure mensagens de erro anteriores; pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.”

Sim, consigo ver que as informações que forneci no post não foram detalhadas o suficiente. Não acho que seja um erro de formatação, já que o yml funciona perfeitamente sem a tag de versão.

Testei um pouco mais e parece que o bug que encontrei não ocorre nas versões 10 e 11, mas ocorre nas versões 4 a 9.

Só encontrei dois erros na saída, e acho que eles são esperados:

2020-02-22 10:42:33.410 UTC [62] postgres@postgres ERROR:  database "discourse" already exists

2020-02-22 10:42:33.533 UTC [73] postgres@discourse ERROR:  role "discourse" already exists

Consultei as notas de lançamento da versão 10 e não encontrei nenhuma referência a uma correção relacionada a isso.

É bom que esteja corrigido e, com sua solução alternativa para as configurações de SMTP (vou testar na segunda-feira, não quero mexer no servidor de produção durante o fim de semana), não há nenhuma necessidade urgente da minha parte. No entanto, seria bom saber se existe algum erro desconhecido que os testes não detectam e que pode retornar, caso tenha sido “corrigido” por acaso e não por uma alteração direcionada. Acho que quero saber quão estável a função de versão pode ser esperada no futuro.

Abaixo está um dump da saída de uma execução com a versão alvo v2.4.0.beta9.
dump_disco_version_error.txt (127.5 KB)

Finalmente consegui testar isso, e não funcionou. Vejo que ele imprime a senha correta quando o aplicativo é iniciado, mas os e-mails continuam falhando devido à negação de acesso.

Hmm. Tenho certeza de que antes funcionava. Vi algumas outras configurações que não foram aplicadas ao arquivo de configuração. Não tenho certeza se isso é considerado um bug.

Também pode ser que eu esteja usando uma versão antiga, então pode funcionar ou não na versão mais recente. Eu só queria atualizar com minhas descobertas.

Tive motivos para voltar a isso. Parece-me que a versão funciona para branches, mas não para tags. Acredito que seja porque o launcher não busca todas as tags primeiro, mas não tenho certeza. Existe alguma maneira de editar os scripts do launcher?

Finalmente descobri o que está errado: o repositório discourse_docker e o repositório discourse dependem um do outro, então uma versão específica do Discourse só pode ser instalada por uma versão específica do repositório discourse_docker. Infelizmente, não há tags no repositório discourse_docker, então encontrar qual SHA deve ser usado para instalar uma versão específica não é fácil. Pelo menos é bom ter algum fechamento. Vou começar a anotar isso para as instalações que fizer no futuro.