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.
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.
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.
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.
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.
¿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?
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.
@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.
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.
@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'
...