Error de actualización de Discourse v3.0.6 a v3.1.1 - método no definido `register_bookmarkable' para Bookmark:Class

Hola,

Estoy intentando actualizar mi instalación de Discourse de la etiqueta de imagen 3.0.6 a 3.1.1, pero estoy viendo el siguiente problema. Sé que estoy usando lo que se considera una instalación no compatible con Bitnami Helm Chart en un clúster de Kubernetes, pero estoy completamente atascado en cómo resolverlo.

El siguiente error se emite cuando intento actualizar desde una instalación de Discourse lista para usar (sin complementos adicionales) a la última versión. Al mirar el foro, puedo ver esta publicación: Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class), pero habla sobre el complemento discourse-data-explorer, que, como se mencionó anteriormente, no está instalado en la instalación predeterminada de Bitnami Discourse.

¿Alguien puede ayudar?

Gracias,

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>'

Creo que el primer recurso, si se tratara de una actualización basada en la web, sería una actualización de línea de comandos: conéctese por SSH a su host y ejecute

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

(Presumiendo que su configuración se llama app.yml)

Editar: excepto que parece que /opt/bitnami/discourse es más probable que sea la ubicación de su instalación. Son diferencias como esta las que conducen a la etiqueta “unsupported-install” y al consejo de ponerse en contacto con su proveedor.

1 me gusta

Gracias @Ed_S, intentaré la actualización manual.

He abierto una incidencia de soporte con Bitnami y afirman que es un problema con el activo, que en este caso es la imagen de Discourse. Les he preguntado si podrían revisarlo de nuevo, ya que una actualización entre sus versiones de Helm Chart debería haber sido probada por Bitnami y cualquier problema que vieran esperanzadoramente se habría resuelto entre Bitnami y el equipo de Discourse.

2 Me gusta

Estoy bastante seguro de que Bitnami no trabaja con el equipo de Discourse.

Si no pueden ayudar y tienes presupuesto, puedes contactarme. Probablemente pueda crear una imagen que funcione.

1 me gusta

Gracias @pfaffman

Pregunta: el error que estoy viendo parece implicar que proviene del plugin de chat, que es un plugin oficialmente compatible. ¿Eso marca alguna diferencia aquí con respecto a que el equipo de Discourse revise el error?

Voy a intentar deshabilitarlo y luego realizar la actualización y ver cómo va.

Creo que con las instalaciones de Bitnami a veces puede haber problemas de incompatibilidad entre su versión y los plugins actualizados.

Si puedes pasar a una instalación estándar, puede que te resulte más fácil (además de poder obtener ayuda de más personas aquí también).

1 me gusta

El plugin de chat está incluido. Si también está instalando el plugin de chat (¿creo que estuvo separado por un tiempo?) entonces ese podría ser el problema.

1 me gusta

Correcto. Inicialmente era un plugin independiente, pero desde entonces se ha incluido en el núcleo, por lo que ya no es necesario instalarlo por separado.

Gracias @JammyDodger

¿Hay alguna forma de deshabilitar los plugins principales al inicio para poder probar si el problema es el plugin de Chat?

El gráfico de Bitnami me permite pasar una lista de plugins y ejecutará el comando RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} para cada plugin que proporcione, PERO creo que eso se agregará a los plugins principales.

Volveré a revisar la instalación estándar: implementamos todas nuestras aplicaciones de terceros utilizando gráficos de Helm en nuestro clúster de Kubernetes, pero tal vez tenga sentido hacer una excepción para Discourse si el soporte de Kubernetes y Helm está muy lejos.

Solo una rápida actualización, parece que realizar una actualización desde una versión anterior a la 3.0.0 permite que la actualización funcione, es decir, de la 2.8.11 → 3.0.6 → 3.1.1.

No estoy seguro de si esto es pura casualidad o no, pero intentar actualizar directamente de la 3.0.6 a la 3.1.1 no funciona.

Curiosamente, el plugin de Chat ni siquiera aparece en mi implementación de Discourse después de esta ruta de actualización. Se cree que todavía se trata como un plugin externo en lugar de ser parte del producto principal.

¿Alguien sabe si el plugin de Chat es correcto con esta ruta de actualización o hay algo muy mal que no esté presente?

¿Lo has habilitado?

Admin → Configuración:

image

Sigue siendo un plugin pero viene incluido con el núcleo, por lo que habilitarlo funciona de manera ligeramente diferente.

Volveré a comprobar mi instalación, pero ni siquiera veo la marca.

Tampoco veo el código del plugin en el servidor con esta actualización, mientras que si empiezo con la v3.0.6 estoy seguro de que sí, pero lo comprobaré todo.

Si estás clonando el repositorio oficial, está incluido, aquí están los contenidos actuales de la rama stable: discourse/plugins/chat at stable · discourse/discourse · GitHub

@merefield - Acabo de comprobarlo, si actualizo de la versión 2.8.11 a la 3.0.6, el plugin de Chat no está disponible.

Como se mencionó anteriormente, estoy usando el gráfico Helm de Bitnami para implementar Discourse, lo cual sé que no es compatible, pero lo interesante es que si empiezo con la versión 3.0.6, el plugin de Chat está presente.

¿Eliminaste el plugin de chat de tu app.yml antes de actualizar? Deberías hacerlo.

No hice nada con el plugin de Chat, pero eso no quiere decir que los scripts que Bitnami usa para construir su versión de la imagen de Discourse no lo estén afectando.

Este es el repositorio de Bitnami Discourse: containers/bitnami/discourse at main · bitnami/containers · GitHub y así es como construyen la imagen de Docker: https://github.com/bitnami/containers/blob/main/bitnami/discourse/3/debian-11/Dockerfile

¿Mi sugerencia? Simplemente restaura una copia de seguridad y pasa a la instalación estándar.

@stevejr Estoy en el mismo aprieto. ¿Pudiste finalmente completar tu actualización? No puedo intentar el proceso de actualización a partir de la 2.8 como sugeriste.

Lamentablemente no. No he realizado ninguna actualización y la respuesta de Bitnami fue hacer una copia de seguridad seguida de una instalación completamente nueva y luego restaurar.

¡Necesito probar esto a fondo ya que no quiero afectar nuestra configuración de producción!

He estado probando variaciones de ese enfoque de una instalación limpia seguida de la restauración desde una copia de seguridad, pero falla debido a lo que parecen ser errores en la migración de la base de datos. Estos intentos se realizan en una implementación de desarrollo independiente que es fácil de restablecer. El registro de restauración muestra esto, por ejemplo:

...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] Migrando la base de datos...
[2024-02-21 12:43:16] EXCEPCIÓN: /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': Falló la migración de la base de datos.
rake aborted!
StandardError: Ha ocurrido un error, esta y todas las migraciones posteriores se cancelaron:

PG::DuplicateTable: ERROR:  la relación «sidebar_sections» ya 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'
...