J’essaie de mettre à niveau mon installation Discourse de l’étiquette d’image 3.0.6 à 3.1.1 mais je rencontre le problème ci-dessous. Je sais que j’utilise ce qui est considéré comme une installation non prise en charge avec le graphique Helm Bitnami dans un cluster Kubernetes, mais je suis complètement bloqué sur la façon de résoudre ce problème.
L’erreur ci-dessous est émise lorsque j’essaie de passer d’une installation Discourse prête à l’emploi (aucun plugin supplémentaire ajouté) à la dernière version. En consultant le forum, je peux voir ce post - Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class) - mais il parle du plugin discourse-data-explorer qui, comme mentionné ci-dessus, n’est pas installé dans l’installation Bitnami Discourse par défaut.
Quelqu’un peut-il aider ?
Merci,
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>'
Je pense que le premier recours, s’il s’agissait d’une mise à jour basée sur le web, serait une mise à niveau en ligne de commande - connectez-vous en ssh à votre hôte et faites
cd /var/discourse
git pull
./launcher rebuild app
(En supposant que votre configuration s’appelle app.yml)
Edit : sauf que, il semble que /opt/bitnami/discourse soit plus susceptible d’être l’emplacement de votre installation. Ce sont des différences comme celles-ci qui mènent à l’étiquette “unsupported-install” et au conseil de contacter votre fournisseur.
Merci @Ed_S, je vais tenter la mise à niveau manuelle.
J’ai ouvert un ticket de support auprès de Bitnami et ils indiquent qu’il s’agit d’un problème avec l’asset, qui dans ce cas est l’image Discourse. J’ai demandé s’ils pouvaient y regarder à nouveau car une mise à niveau entre leurs versions de Helm Chart aurait dû être testée par Bitnami et tout problème qu’ils rencontreraient aurait idéalement été résolu entre Bitnami et l’équipe Discourse.
Je suis à peu près sûr que Bitnami ne travaille pas avec l’équipe de Discourse.
S’ils ne peuvent pas vous aider et que vous avez un budget, vous pouvez me contacter. Je pourrais probablement vous construire une image qui fonctionnera.
Question - l’erreur que je vois semble provenir du plugin Chat, qui est un plugin officiellement pris en charge - cela fait-il une différence ici en ce qui concerne l’équipe Discourse qui examine l’erreur ?
Je vais essayer de le désactiver, puis d’effectuer la mise à niveau et de voir comment cela se passe.
Je pense qu’avec les installations Bitnami, il peut parfois y avoir des problèmes d’incompatibilité entre leur version et les plugins mis à jour.
Si vous pouvez passer à une installation standard, vous pourriez avoir plus de facilité (ainsi que pouvoir obtenir de l’aide de plus de personnes ici également).
Le plugin de chat est inclus. Si vous installez également le plugin de chat (je pense qu’il était séparé pendant un certain temps ?), cela pourrait être le problème.
C’est exact. Il s’agissait initialement d’un plugin distinct, mais il a depuis été intégré au cœur du système, il n’est donc plus nécessaire de l’installer séparément.
Existe-t-il un moyen de désactiver les plugins principaux au démarrage afin que je puisse tester si le plugin Chat est le problème ?
Le chart Bitnami me permet de passer une liste de plugins et il exécutera la commande RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} pour chaque plugin que je fournis MAIS je pense que ce sera en plus des plugins principaux.
Je vais regarder à nouveau l’installation standard - nous déployons toutes nos applications tierces à l’aide de charts Helm dans notre cluster kubernetes mais il serait peut-être judicieux de faire une exception pour Discourse si le support de kubernetes et de Helm est encore loin.
Juste une petite mise à jour, il semble qu’une mise à niveau à partir d’une version antérieure à 3.0.0 permette à la mise à niveau de fonctionner, par exemple 2.8.11 → 3.0.6 → 3.1.1
Je ne suis pas sûr s’il s’agit d’un pur accident ou non, mais essayer de passer de 3.0.6 directement à 3.1.1 ne fonctionne pas.
Il est intéressant de noter que le plugin Chat n’apparaît même pas dans mon déploiement Discourse après ce chemin de mise à niveau. On pense qu’il est toujours traité comme un plugin externe plutôt que de faire partie du produit principal.
Quelqu’un sait si le plugin Chat est correct avec ce chemin de mise à niveau ou si quelque chose ne va pas car il n’est pas présent !
Je vais vérifier mon installation, mais je ne vois même pas le drapeau.
Je ne vois pas non plus le code du plugin sur le serveur avec cette mise à niveau, alors que si je commence avec la v3.0.6, je suis sûr de le voir, mais je vais tout vérifier.
@merefield - Je viens de vérifier, si je passe de la version 2.8.11 à 3.0.6, le plugin Chat n’est pas disponible.
Comme mentionné ci-dessus, j’utilise le graphique Helm Bitnami pour déployer Discourse, ce que je sais n’est pas pris en charge, mais ce qui est intéressant, c’est que si je commence avec la version 3.0.6, le plugin Chat est présent.
Je n’ai rien fait avec le plugin Chat, mais cela ne veut pas dire que les scripts que Bitnami utilise pour construire leur version de l’image Discourse n’ont pas d’impact dessus.
@stevejr Je suis dans le même pétrin. Avez-vous finalement réussi à terminer votre mise à niveau ? Je ne suis pas en mesure d’essayer le processus de mise à niveau à partir de 2.8 comme vous l’avez suggéré.
Malheureusement non. Je n’ai effectué aucune mise à niveau et la réponse de Bitnami a été de faire une sauvegarde suivie d’une réinstallation complète, puis d’une restauration.
Je dois tester cela entièrement car je ne veux pas impacter notre configuration de production !
J’ai essayé plusieurs variations de cette approche d’une nouvelle installation suivie d’une restauration à partir de la sauvegarde, mais cela échoue en raison de ce qui semble être des bugs dans la migration de la base de données. Ces tentatives sont effectuées sur un déploiement de développement indépendant qui est facile à réinitialiser. Le journal de restauration montre ceci par exemple :
...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] Migration de la base de données...
[2024-02-21 12:43:16] EXCEPTION : /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': Échec de la migration de la base de données.
rake aborted!
StandardError: Une erreur s'est produite, cette migration et toutes les suivantes sont annulées :
PG::DuplicateTable: ERREUR : la relation « sidebar_sections » existe déjà
/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'
...