Mise à niveau échouée (NoMethodError : méthode non définie `register_bookmarkable' pour Bookmark:Class)

Effectuer une mise à niveau dans l’interface Web d’administration, de 3.1.0.beta2 à beta3, je pense avoir terminé avec succès la mise à niveau de Docker Manager, puis la mise à niveau principale de Discourse a échoué comme suit :

$ yarn install --production
yarn install v1.22.19
[1/5] Validation du package.json...
[2/5] Résolution des packages...
[3/5] Récupération des packages...
[4/5] Liaison des dépendances...
warning « > @mixer/parallel-prettier@2.0.3 » a une dépendance pair non satisfaite « prettier@^2.0.0 ».
warning « eslint-config-discourse > eslint-plugin-lodash@7.1.0 » a une dépendance pair non satisfaite « lodash@>=4 ».
[5/5] Création de nouveaux packages...
$ yarn --cwd app/assets/javascripts/discourse $(node -e 'if(JSON.parse(process.env.npm_config_argv).original.includes(`--frozen-lockfile`)){console.log(`--frozen-lockfile`)}')
yarn install v1.22.19
[1/4] Résolution des packages...
[2/4] Récupération des packages...
[3/4] Liaison des dépendances...
warning « > babel-plugin-debug-macros@0.4.0-pre1 » a une dépendance pair non satisfaite « @babel/core@^7.0.0 ».
warning « workspace-aggregator-0156df5c-af27-46bf-a6aa-a0a12748bb32 > discourse > @uppy/xhr-upload@3.1.0 » a une dépendance pair incorrecte « @uppy/core@^3.0.6 ».
[4/4] Création de nouveaux packages...
success Verrouillage enregistré.
Terminé en 20,00 s.
Terminé en 44,16 s.
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-data-explorer est déjà à la dernière version compatible
docker_manager est déjà à la dernière version compatible
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
rake avorté !
NoMethodError : méthode non trouvée `register_bookmarkable' pour Bookmark:Class
Avez-vous voulu dire ? registered_bookmarkables
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.3/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/var/www/discourse/plugins/discourse-data-explorer/plugin.rb:902:in `block in activate!'
/var/www/discourse/lib/plugin/instance.rb:503:in `block in notify_after_initialize'
/var/www/discourse/lib/plugin/instance.rb:501:in `each'
/var/www/discourse/lib/plugin/instance.rb:501:in `notify_after_initialize'
/var/www/discourse/config/application.rb:228:in `each'
/var/www/discourse/config/application.rb:228:in `block (2 levels) in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:228:in `block in <class:Application>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:92:in `block in execute_hook'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:85:in `with_execution_control'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:90:in `execute_hook'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:76:in `block in run_load_hooks'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:75:in `each'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activesupport-7.0.4.3/lib/active_support/lazy_load_hooks.rb:75:in `run_load_hooks'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application/finisher.rb:87:in `block in <module:Finisher>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:372:in `initialize!'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:348:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:511:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `kernel_load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:23:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:491:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:34:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:28:in `start'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/exe/bundle:45:in `block in <top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/exe/bundle:33:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/bin/bundle:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/bin/bundle:25:in `<main>'
Tasks : TOP => multisite:migrate => db:load_config => environment
(Voir la trace complète en exécutant la tâche avec --trace)
Docker Manager : ÉCHEC DE LA MISE À NIVEAU
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:202:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:101:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/commands/runner/runner_command.rb:43:in `load'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/commands/runner/runner_command.rb:43:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/command/base.rb:87:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/command.rb:48:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/commands.rb:18:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bootsnap-1.15.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
bin/rails:18:in `<main>'
Lancement de 1 worker Unicorn qui étaient initialement arrêtés

Le forum fonctionne, mais l’état des lieux n’est pas clair (pour moi) - la page de mise à niveau suggère maintenant que je suis à latest-release +24, que docker_manager est à jour à e90c8f55 et que Data Explorer est le seul composant qui nécessite une mise à niveau. Mais le tableau de bord indique toujours que je suis à beta2 (b96869d5fb).

Que faire ? Ma meilleure hypothèse est d’effectuer une mise à niveau par CLI. J’ai mis le forum en mode lecture seule pour l’instant.

2 « J'aime »

J’ai trouvé quelques modifications récentes dans le code qui semblent en être la cause, et il semble qu’il y ait un conflit avec mon plugin discourse-data-explorer, maintenant obsolète.

Comme je peux me passer de ce plugin pour le moment, j’ai supprimé cette ligne de mon app.yml et effectué une reconstruction. (J’aurais pu essayer une reconstruction telle quelle, mais je suis déjà hors ligne depuis quelques heures.) Et cela a réussi, donc je suis de nouveau en ligne.

(Je considère mes actions comme une solution de contournement, pas comme une correction.)

Les modifications potentiellement liées sont :

1 « J'aime »

J’ai rencontré exactement la même erreur en essayant de passer de la version 3.1.0.beta2 à la 3.1.0.beta3. Cela s’est produit sur ma machine non-production que j’utilise pour « m’entraîner » aux mises à niveau avant de les effectuer sur la machine de production.

Dans mon cas, le forum était inaccessible après avoir rencontré l’erreur.

Supprimer la ligne du plugin discourse-data-explorer de mon fichier app.yml et reconstruire a contourné le problème.

Un grand merci à @Ed_S pour m’avoir fait gagner énormément de temps avec ce post utile !

1 « J'aime »

Pour ce que ça vaut, j’ai restauré ma VM plusieurs fois et j’ai retenté cette mise à niveau de 2 manières différentes :

Manière n° 1 - Effectuer la mise à niveau, puis effectuer une reconstruction juste après l’erreur.

Manière n° 2 - Supprimer le plugin discourse-data-explorer de app.yml, reconstruire, réajouter le plugin discourse-data-explorer à app.yml, reconstruire.

Les deux ont semblé fonctionner correctement. Je noterai également que les reconstructions ci-dessus ont pour effet de mettre à niveau l’installation vers la version 3.1.0.beta3. Cependant, l’erreur dans la manière n° 1 me rend nerveux quant à la possibilité que certains fichiers ou données restent dans un état non optimal en raison de l’interruption de la mise à niveau. Par conséquent, je vais probablement utiliser la manière n° 2 en production.

1 « J'aime »

Quelqu’un a-t-il vu cette erreur sans que le plugin discourse-data-explorer soit installé ?