Problemas com upgrade auto-hospedado para 3.x: não é possível reverter

Esta atualização está falhando para mim e, no momento, todos os meus 3 fóruns Discourse estão fora do ar.

A janela do console na tela de Upgrade não está exibindo nada, mas o restante da interface sugere que a atualização ainda está em andamento (mas isso já demorou muito mais do que qualquer atualização que já fiz).

Mais alguém está passando por isso? Alguma ideia de como posso fazer a atualização ser concluída com sucesso?

1 curtida

@pearsonified como isso inclui uma atualização do componente Rails, esta é uma daquelas versões que precisam de uma atualização da linha de comando.

2 curtidas

Ahh, esse é o problema com o erro do ruby 3.0 e o web-push-3.0.0?

A interface de atualização de administrador deveria informar isso ao usuário em vez de deixá-lo clicar em “atualizar tudo” e acabar com um fórum completamente quebrado. Isso pouparia muitas palpitações cardíacas aos usuários.

1 curtida

Sem ideia; eu pessoalmente nunca uso a GUI para atualizações, eu pessoalmente só as faço pela linha de comando. Eu não vi nenhum erro que se parecesse com isso. Mas, novamente, eu não teria visto.

Na maioria das vezes, quando você vê uma mensagem de erro genérica, se o cenário específico pudesse ser previsto o suficiente para uma mensagem de erro específica, ele teria sido evitado.

Acho que é bom que o problema de “ajude minha atualização da GUI falhou” seja tão raro que a maioria das pessoas não percebe que a primeira coisa a fazer é simplesmente executar git pull; ./launcher rebuild app para a implantação padrão. É quase sempre a resposta aqui.

Mas é a coisa geral a fazer se a atualização da GUI falhar.

3 curtidas

Tenho usado o Discourse há muitos anos. Tipo 7? De qualquer forma, nunca tive uma atualização da web falhando catastroficamente antes. Ela falhou, é claro, mas o fórum sempre voltou à vida porque reverteu e iniciou o contêiner antigo.

Não é um erro genérico, a coisa do ruby é bem clara.

web-push-3.0.0 requer a versão ruby >= 3.0, que é incompatível com a
versão atual, 2.7.6
Docker Manager: FALHA AO ATUALIZAR

Eu estaria reclamando bem alto sobre isso se pagasse pelo Discourse. Não porque há um grande bug que matou nosso fórum, bugs acontecem, mas porque não foi corrigido nos últimos 3 dias, pelo menos. Como está, apenas um pouco de emoção no final do dia.

1 curtida

Do ponto de vista do gerenciador do Docker, aquele código, na época em que a versão já em execução foi escrita, não sabia que no futuro esse problema aconteceria. Entendo que você esteja frustrado, mas o que você está pedindo pode não fazer sentido tecnicamente.

Se você pagasse pelo Discourse, eles estariam gerenciando esse processo e você nunca o veria. :smiling_face:

3 curtidas

Mesmo que tecnicamente impossível de corrigir, vocês poderiam enviar e-mails aos usuários para avisá-los para atualizar via CLI. Façam barulho sobre isso. Quebrar fóruns sem rollback é ruim.

Eu pensei que o Discourse também vendesse suporte para uso on-premise? De qualquer forma, não posso reclamar muito alto, pois não sou um cliente pagante, mas, caramba, 3 dias não é ótimo.

1 curtida

Fico feliz por você que esta é a primeira vez em sete anos que você teve que recorrer a isso, mas:

Vou chamar isso de uma caracterização incorreta. A CDCK realmente recomenda backups antes das atualizações como uma boa prática. Já vi muitas vezes aqui no meta a observação de que, se a atualização da GUI falhar, recorra à reconstrução pela linha de comando, como parte das expectativas normais para administrar seu próprio fórum. Eles não quebraram fóruns sem rollback, então sua implicação é falsa.

Não vou ficar aqui discutindo por horas. Acho apenas que você não está sendo completamente razoável aqui.

Além disso, atualizar um servidor de produção sem executar essa atualização em algum tipo de ambiente de homologação é pedir por problemas.

Não precisa ser uma cópia em escala total, um VPS de US$ 5 é suficiente para a maioria. Se você quiser evitar tempo de inatividade e a necessidade de recorrer aos seus backups, é o seguro mais barato que você pode obter.

1 curtida

Acabei de testar isso em uma instância de teste do DO que não é atualizada há muito tempo:

e como relatado, deu erro:

Fetching gem metadata from https://rubygems.org/.........
Fetching https://github.com/rails/sprockets
web-push-3.0.0 requires ruby version >= 3.0, which is incompatible with the
current version, 2.7.6
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:209:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:93:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:20:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/fork_tracker.rb:18:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Spinning up 3 Unicorn worker(s) that were stopped initially

e a página de atualização agora mostra:

e o site principal retorna 500. Em /logs vejo este erro:

NoMethodError (undefined method `navigation_menu' for #<Class:0x00007fdffcb1b2f8>)
lib/wizard/builder.rb:98:in `block in build'
lib/wizard.rb:25:in `append_step'
lib/wizard/builder.rb:61:in `build'
lib/wizard.rb:110:in `requires_completion?'
lib/wizard.rb:117:in `user_requires_completion?'
app/serializers/site_serializer.rb:171:in `include_wizard_required?'
...

@pearsonified @mcdanlj Vocês podem colar os erros que estavam recebendo?

Não sei se podemos fazer algo agora para evitar isso para futuros usuários, mas vamos investigar.

Enquanto isso, os seguintes passos ajudaram?

6 curtidas

Vou executar as atualizações da linha de comando esta manhã e ver como isso vai. Os fóruns estão fora do ar há 18 horas :pensive_face:

2 curtidas

Se você estivesse me perguntando sim, a reconstrução da CLI funcionou bem. Sou um SA decente e encontrei a solução nos fóruns aqui, mas parece que outros proprietários de fóruns como @pearsonified foram severamente inconvenientes. 18 horas de inatividade, uau.

Pessoas falando sobre ambientes de staging e produção estão loucas. Existem muitas pessoas não corporativas hospedando fóruns Discourse em pequenas VMs. “Você deveria estar testando em um ambiente de staging” é uma resposta insultuosa e santimoniosa que não justifica de forma alguma quebrar a instalação deles. Nada justifica isso.

Eu só quero enfatizar que aprecio que este excelente software seja completamente gratuito. Sou grato por isso, e os tropeços ocasionais não mudam meus sentimentos.

2 curtidas

Discourse é gratuito, servidores, domínios e nosso tempo não são.

Isso não tem nada a ver com ambientes corporativos, é apenas senso comum quando há tantas variáveis em jogo. Muito trabalho é feito para tornar as atualizações perfeitas e, se você preferir doar seu tempo gratuitamente para resolver problemas significativos, essa é sua decisão - mas pessoalmente, prefiro saber que as comunidades sem fins lucrativos e voluntárias que hospedo ficarão indisponíveis uma vez para uma atualização indolor, em vez de um período prolongado.

O menor VPS na DO será suficiente para reduzir o risco das atualizações, desde que o teste seja representativo - se você for um bom SA, esses US$ 5 são o custo de uma xícara de café e uma fração da sua taxa de mercado por hora.

A VM de stg também teria que conter os dados do fórum, o que dobraria nossos custos de hospedagem. De qualquer forma, não é necessário, é um fórum de videogame e um pouco de inatividade (não 18 horas!) é aceitável. No pior cenário, eu tinha um snapshot da VM antes da atualização, então eu poderia simplesmente ter revertido.

Acho que os 4 dias que isso permaneceu quebrado é preocupante. Falhas de atualização sem rollback deveriam acionar um momento de “santo Deus, isso precisa ser consertado AGORA”. Isso não deveria ser uma declaração controversa.

1 curtida

Eu também recebi o erro do web-push Ruby. Fórum normal, sem plugins personalizados.

web-push-3.0.0 requer versão do ruby >= 3.0, que é incompatível com a
versão atual, 2.7.6

Houve momentos anteriormente em que foi dito que deveria ser atualizado via linha de comando. Talvez essa opção possa ser habilitada agora para qualquer versão que esteja causando esse problema?

Editar: Ah, na verdade diz isso!

O problema é que quando você faz uma atualização do docker_manager e depois clica na aba no topo em vez de atualizar a página. Então, poderia ser alterado para atualizar via HTTP em vez de apenas mudar de aba com JS?

1 curtida