Erro de atualização do Discourse v3.0.6 para v3.1.1 - método indefinido `register_bookmarkable' para Bookmark:Class

Olá,

Estou tentando atualizar minha instalação do Discourse da tag de imagem 3.0.6 para 3.1.1, mas estou vendo o problema abaixo. Sei que estou usando o que é considerado uma instalação não suportada com o Bitnami Helm Chart em um cluster Kubernetes, mas estou completamente preso em como resolver.

O erro abaixo está sendo emitido quando tento atualizar de uma instalação padrão do Discourse (sem plugins adicionais) para a versão mais recente. Olhando no fórum, posso ver esta postagem - Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class) - mas ela fala sobre o plugin discourse-data-explorer, que, como mencionado acima, não está instalado na instalação padrão do Bitnami Discourse.

Alguém pode ajudar?

Obrigado,

Steve

discourse 07:39:04.07 INFO  ==> Running database migrations
rake aborted!
NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.5.1/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/opt/bitnami/discourse/plugins/chat/plugin.rb:261:in `block (2 levels) in activate!'
/opt/bitnami/discourse/lib/plugin/instance.rb:1351:in `reloadable_patch'
/opt/bitnami/discourse/plugins/chat/plugin.rb:250:in `block in activate!'
/opt/bitnami/discourse/lib/plugin/instance.rb:526:in `block in notify_after_initialize'
/opt/bitnami/discourse/lib/plugin/instance.rb:524:in `each'
/opt/bitnami/discourse/lib/plugin/instance.rb:524:in `notify_after_initialize'
/opt/bitnami/discourse/config/application.rb:230:in `each'
/opt/bitnami/discourse/config/application.rb:230:in `block (2 levels) in <class:Application>'
/opt/bitnami/discourse/lib/plugin.rb:6:in `initialization_guard'
/opt/bitnami/discourse/config/application.rb:230:in `block in <class:Application>'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:92:in `block in execute_hook'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:85:in `with_execution_control'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:90:in `execute_hook'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:76:in `block in run_load_hooks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:75:in `each'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5.1/lib/active_support/lazy_load_hooks.rb:75:in `run_load_hooks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application/finisher.rb:87:in `block in <module:Finisher>'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:32:in `instance_exec'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:32:in `run'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/initializable.rb:60:in `run_initializers'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:372:in `initialize!'
/opt/bitnami/discourse/config/environment.rb:7:in `<main>'
internal:/opt/bitnami/ruby/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require'
internal:/opt/bitnami/ruby/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb:38:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.10/lib/zeitwerk/kernel.rb:38:in `require'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:348:in `require_environment!'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.5.1/lib/rails/application.rb:506:in `block in run_tasks_blocks'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/opt/bitnami/ruby/bin/bundle:25:in `load'
/opt/bitnami/ruby/bin/bundle:25:in `<main>'

Acho que o primeiro recurso, se esta fosse uma atualização baseada na web, seria uma atualização de linha de comando - conecte-se via SSH ao seu host e execute

cd /var/discourse
git pull
./launcher rebuild app

(Presumindo que sua configuração se chame app.yml)

Editar: exceto que parece que /opt/bitnami/discourse é mais provável que seja o local da sua instalação. São diferenças como essa que levam à tag “unsupported-install” e ao conselho de entrar em contato com seu fornecedor.

1 curtida

Obrigado @Ed_S, vou tentar a atualização manual.

Abri um chamado de suporte com a Bitnami e eles estão afirmando que é um problema com o asset, que neste caso é a imagem do Discourse. Perguntei se eles poderiam analisar novamente, pois uma atualização entre as versões do Helm Chart deles deveria ter sido testada pela Bitnami e quaisquer problemas que eles vissem teriam sido resolvidos entre a Bitnami e a equipe do Discourse.

2 curtidas

Tenho quase certeza de que o Bitnami não trabalha com a equipe do Discourse.

Se eles não puderem ajudar e você tiver um orçamento, pode me contatar. Provavelmente posso criar uma imagem para você que funcionará.

1 curtida

Obrigado @pfaffman

Pergunta - o erro que estou vendo parece implicar que é do plugin Chat, que é um plugin oficialmente suportado - isso faz alguma diferença aqui em relação à equipe do Discourse analisar o erro?

Vou tentar desativá-lo e, em seguida, realizar a atualização e ver como isso acontece.

Acho que com as instalações do Bitnami pode haver problemas de incompatibilidade entre a versão deles e os plugins atualizados.

Se você puder migrar para uma instalação padrão, pode ter mais facilidade (além de poder obter suporte de mais pessoas aqui também).

1 curtida

O plugin de chat está incluído. Se você também estiver instalando o plugin de chat (acho que ele ficou separado por um tempo?), esse pode ser o problema.

1 curtida

Correto. Inicialmente era um plugin separado, mas desde então foi incluído no núcleo, portanto, não é mais necessário instalá-lo separadamente.

Obrigado @JammyDodger

Existe uma maneira de desativar plugins principais na inicialização para que eu possa testar se o plugin de Chat é o problema?

O gráfico Bitnami me permite passar uma lista de plugins e ele executará o comando RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} para cada plugin que eu fornecer, MAS acho que isso será adicionado aos plugins principais.

Vou olhar novamente a instalação padrão - implantamos todos os nossos aplicativos de terceiros usando gráficos Helm em nosso cluster kubernetes, mas talvez faça sentido abrir uma exceção para o Discourse se o suporte a kubernetes e helm estiverem muito distantes.

Apenas uma rápida atualização, parece que realizar um upgrade de uma versão anterior à 3.0.0 permite que o upgrade funcione, ou seja, 2.8.11 → 3.0.6 → 3.1.1

Não tenho certeza se isso é um mero acidente ou não, mas tentar fazer o upgrade de 3.0.6 diretamente para 3.1.1 não funciona.

Curiosamente, o plugin de Chat nem sequer aparece na minha implantação do Discourse após este caminho de upgrade. Acredita-se que ele ainda seja tratado como um plugin externo em vez de fazer parte do produto principal.

Alguém sabe se o plugin de Chat está correto com este caminho de upgrade ou há algo muito errado que ele não esteja presente!

Você o habilitou?

Admin -\u003e Configurações:

image

Ainda é um plugin, mas vem com o núcleo, então habilitá-lo funciona de maneira um pouco diferente.

Vou verificar minha instalação novamente, mas nem vejo o sinalizador.

Também não vejo o código do plugin no servidor com esta atualização, enquanto se eu começar com a v3.0.6, tenho certeza que vejo, mas verificarei tudo.

Se você estiver clonando o repositório oficial, ele está incluído, aqui estão os conteúdos atuais do branch stable: discourse/plugins/chat at stable · discourse/discourse · GitHub

@merefield - Acabei de verificar, se eu atualizar da versão 2.8.11 para 3.0.6 o plugin Chat não está disponível.

Como mencionado acima, estou usando o Bitnami Helm chart para implantar o Discourse, o que sei que não é suportado, mas o interessante é que se eu começar com a versão 3.0.6 o plugin Chat está presente.

Você removeu o plugin de chat do seu app.yml antes de atualizar? Você deveria.

Não fiz nada com o plugin de Chat, mas isso não quer dizer que os scripts que a Bitnami usa para construir sua versão da imagem do Discourse não o estejam impactando.

Este é o repositório Bitnami Discourse - containers/bitnami/discourse at main · bitnami/containers · GitHub e é assim que eles constroem a imagem Docker - https://github.com/bitnami/containers/blob/main/bitnami/discourse/3/debian-11/Dockerfile

Minha sugestão? Apenas restaure um backup e mude para a instalação padrão.

@stevejr Estou no mesmo aperto. Você conseguiu concluir sua atualização? Não consigo tentar o processo de atualização a partir da versão 2.8, como você sugeriu.

Infelizmente não. Não realizei nenhuma atualização e a resposta da Bitnami foi fazer um backup seguido por uma instalação completamente nova e, em seguida, restaurar.

Preciso testar isso completamente, pois não quero impactar nossa configuração de produção!

Tenho tentado variações dessa abordagem de uma instalação limpa seguida pela restauração a partir do backup, mas falha devido ao que parecem ser bugs na migração do banco de dados. Essas tentativas são feitas em uma implantação de desenvolvimento independente que é fácil de redefinir. O log de restauração mostra isto, por exemplo:

...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] Migrando o banco de dados...
[2024-02-21 12:43:16] EXCEPTION: /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': Falha ao migrar o banco de dados.
rake aborted!
StandardError: Ocorreu um erro, esta e todas as migrações posteriores foram canceladas:

PG::DuplicateTable: ERRO:  a relação \"sidebar_sections\" já existe
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.0/lib/patches/db/pg.rb:110:in `exec'
/opt/bitnami/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.1.0/lib/patches/db/pg.rb:110:in `async_exec'
...