Aggiornamento fallito (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class)

Eseguendo un aggiornamento nell’interfaccia web di amministrazione, da 3.1.0.beta2 a beta3, penso di aver terminato con successo l’aggiornamento di Docker Manager e poi l’aggiornamento principale di Discourse è fallito così:\n\n\n$ yarn install --production\nyarn install v1.22.19\n[1/5] Validating package.json...\n[2/5] Resolving packages...\n[3/5] Fetching packages...\n[4/5] Linking dependencies...\nwarning \" \u003e @mixer/parallel-prettier@2.0.3\" has unmet peer dependency \"prettier@^2.0.0\".\nwarning \"eslint-config-discourse \u003e eslint-plugin-lodash@7.1.0\" has unmet peer dependency \"lodash@\u003e=4\".\n[5/5] Building fresh packages...\n$ yarn --cwd app/assets/javascripts/discourse $(node -e 'if(JSON.parse(process.env.npm_config_argv).original.includes(`--frozen-lockfile`)){console.log(`--frozen-lockfile`)}')\nyarn install v1.22.19\n[1/4] Resolving packages...\n[2/4] Fetching packages...\n[3/4] Linking dependencies...\nwarning \" \u003e babel-plugin-debug-macros@0.4.0-pre1\" has unmet peer dependency \"@babel/core@^7.0.0\".\nwarning \"workspace-aggregator-0156df5c-af27-46bf-a6aa-a0a12748bb32 \u003e discourse \u003e @uppy/xhr-upload@3.1.0\" has incorrect peer dependency \"@uppy/core@^3.0.6\".\n[4/4] Building fresh packages...\nsuccess Saved lockfile.\nDone in 20.00s.\nDone in 44.16s.\n$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all\ndiscourse-data-explorer is already at latest compatible version\ndocker_manager is already at latest compatible version\n$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate\nrake aborted!\nNoMethodError: undefined method `register_bookmarkable' for Bookmark:Class\nDid you mean? registered_bookmarkables\n/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'\n/var/www/discourse/plugins/discourse-data-explorer/plugin.rb:902:in `block in activate!'\n/var/www/discourse/lib/plugin/instance.rb:503:in `block in notify_after_initialize'\n/var/www/discourse/lib/plugin/instance.rb:501:in `each'\n/var/www/discourse/lib/plugin/instance.rb:501:in `notify_after_initialize'\n/var/www/discourse/config/application.rb:228:in `each'\n/var/www/discourse/config/application.rb:228:in `block (2 levels) in \u003cclass:Application\u003e'\n/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'\n/var/www/discourse/config/application.rb:228:in `block in \u003cclass:Application\u003e'\n/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'\n/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'\n/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'\n/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'\n/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'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application/finisher.rb:87:in `block in \u003cmodule:Finisher\u003e'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `instance_exec'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `run'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:60:in `run_initializers'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:372:in `initialize!'\n/var/www/discourse/config/environment.rb:7:in `\u003cmain\u003e'\n/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'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.3/lib/rails/application.rb:348:in `require_environment!'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rake-13.0.6/exe/rake:27:in `\u003ctop (required)\u003e'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `load'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:58:in `kernel_load'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli/exec.rb:23:in `run'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:491:in `exec'\n/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'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:34:in `dispatch'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/cli.rb:28:in `start'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/exe/bundle:45:in `block in \u003ctop (required)\u003e'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/bundler-2.4.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/exe/bundle:33:in `\u003ctop (required)\u003e'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/bin/bundle:25:in `load'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/bin/bundle:25:in `\u003cmain\u003e'\nTasks: TOP =\u003e multisite:migrate =\u003e db:load_config =\u003e environment\n(See full trace by running task with --trace)\nDocker Manager: FAILED TO UPGRADE\n#\u003cRuntimeError: RuntimeError\u003e\n/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:202:in `run'\n/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:101:in `upgrade'\n/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in \u003cmain\u003e'\n/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'\n/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `\u003cmain\u003e'\n/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'\n/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'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/command.rb:27:in `run'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/command/base.rb:87:in `perform'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/command.rb:48:in `invoke'\n/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/railties-7.0.4.1/lib/rails/commands.rb:18:in `\u003cmain\u003e'\n/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'\n/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'\nbin/rails:18:in `\u003cmain\u003e'\nSpinning up 1 Unicorn worker(s) that were stopped initially\n\n\nIl forum è in esecuzione, ma la situazione è poco chiara (per me): la pagina di aggiornamento ora suggerisce che sono a latest-release +24, che docker_manager è aggiornato a e90c8f55 e che Data Explorer è l’unico componente che necessita di un aggiornamento. Ma la dashboard dice ancora che sono a beta2 (b96869d5fb).\n\nCosa fare? La mia migliore ipotesi è eseguire un aggiornamento da riga di comando. Ho messo il forum in modalità di sola lettura per ora.

2 Mi Piace

Ho trovato un paio di modifiche recenti nel codice che sembrano esserne la causa, e sembra che forse ci sia un conflitto con il mio plugin discourse-data-explorer ormai obsoleto.

Quindi, dato che per ora posso fare a meno di quel plugin, ho rimosso quella riga dal mio app.yml e ho eseguito una ricostruzione. (Avrei potuto provare una ricostruzione così com’era, ma sono già un paio d’ore offline.) E questo ha avuto successo, quindi sono di nuovo online.

(Vedo le mie azioni come una soluzione temporanea, non una correzione.)

Le modifiche potenzialmente correlate sono

1 Mi Piace

Ho appena riscontrato esattamente lo stesso errore durante l’aggiornamento da 3.1.0.beta2 a 3.1.0.beta3. Questo è successo nella mia casella non di produzione che uso per “esercitarmi” con gli aggiornamenti prima di eseguirli sulla casella di produzione.

Nel mio caso, il forum è stato interrotto dopo che ho riscontrato l’errore.

La rimozione della riga del plugin discourse-data-explorer da app.yml e la ricostruzione hanno aggirato il problema.

Molte grazie a @Ed_S per avermi fatto risparmiare un sacco di tempo con questo post utile!

1 Mi Piace

Per quello che vale, ho ripristinato la mia VM alcune volte e ho ritentato questo aggiornamento in 2 modi diversi:

Modo n. 1: Esegui l’aggiornamento e poi esegui una ricostruzione subito dopo l’errore.

Modo n. 2: Rimuovi il plugin discourse-data-explorer da app.yml, ricostruisci, riaggiungi il plugin discourse-data-explorer a app.yml, ricostruisci.

Entrambi sembravano funzionare bene. Noterò anche che le ricostruzioni di cui sopra hanno l’effetto di aggiornare l’installazione a 3.1.0.beta3. Tuttavia, l’errore nel Modo n. 1 mi rende nervoso sul fatto che qualche file o dato possa rimanere in uno stato non ottimale a causa dell’aggiornamento interrotto. Quindi, probabilmente userò il Modo n. 2 in produzione.

1 Mi Piace

Qualcuno ha riscontrato questo errore senza che il plugin discourse-data-explorer fosse installato?