Discourse v3.0.6 zu v3.1.1 Upgrade-Fehler - undefined method `register_bookmarkable' for Bookmark:Class

Hallo,

Ich versuche, meine Discourse-Installation von Image-Tag 3.0.6 auf 3.1.1 zu aktualisieren, sehe aber das folgende Problem. Ich weiß, dass ich mit dem Bitnami Helm Chart in einem Kubernetes-Cluster eine nicht unterstützte Installation verwende, aber ich stecke völlig fest, wie ich das lösen kann.

Der folgende Fehler wird ausgegeben, wenn ich versuche, von einer Standard-Discourse-Installation (ohne zusätzliche Plugins) auf die neueste Version zu aktualisieren. Wenn ich mir das Forum ansehe, sehe ich diesen Beitrag – Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class) – aber er spricht über das discourse-data-explorer-Plugin, das, wie oben erwähnt, in der Standard-Bitnami-Discourse-Installation nicht installiert ist.

Kann mir jemand helfen?

Danke,

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

Ich denke, die erste Anlaufstelle wäre bei einem webbasierten Update ein Kommandozeilen-Upgrade – ssh zu Ihrem Host und führen Sie aus:

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

(Vorausgesetzt, Ihre Konfiguration heißt app.yml)

Bearbeiten: Es sieht so aus, als ob /opt/bitnami/discourse eher der Speicherort Ihrer Installation ist. Es sind Unterschiede wie diese, die zum Tag „unsupported-install“ und dem Rat führen, sich mit Ihrem Lieferanten in Verbindung zu setzen.

1 „Gefällt mir“

Danke @Ed_S, ich werde das manuelle Upgrade versuchen.

Ich habe ein Support-Problem bei Bitnami eingereicht und sie geben an, dass es sich um ein Problem mit dem Asset handelt, in diesem Fall dem Discourse-Image. Ich habe sie gebeten, es sich noch einmal anzusehen, da ein Upgrade zwischen ihren Helm-Chart-Versionen von Bitnami getestet worden sein sollte und alle Probleme, die sie sehen, hoffentlich zwischen Bitnami und dem Discourse-Team gelöst worden wären.

2 „Gefällt mir“

Ich bin ziemlich sicher, dass Bitnami nicht mit dem Discourse-Team zusammenarbeitet.

Wenn sie nicht helfen können und Sie ein Budget haben, können Sie mich kontaktieren. Ich kann wahrscheinlich ein Image für Sie erstellen, das funktioniert.

1 „Gefällt mir“

Danke @pfaffman

Frage – der Fehler, den ich sehe, scheint darauf hinzudeuten, dass er vom Chat-Plugin stammt, das ein offiziell unterstütztes Plugin ist – macht das einen Unterschied, wenn es darum geht, dass das Discourse-Team sich den Fehler ansieht?

Ich werde versuchen, es zu deaktivieren und dann das Upgrade durchzuführen und zu sehen, wie das funktioniert.

Ich denke, bei den Bitnami-Installationen kann es manchmal zu Inkompatibilitätsproblemen zwischen ihrer Version und den aktualisierten Plugins kommen.

Wenn Sie zu einer Standardinstallation wechseln können, haben Sie es möglicherweise einfacher (und können auch von mehr Leuten hier Unterstützung erhalten).

1 „Gefällt mir“

Das Chat-Plugin ist enthalten. Wenn Sie auch das Chat-Plugin installieren (ich glaube, es war eine Weile separat?), dann könnte das das Problem sein.

1 „Gefällt mir“

Das ist richtig. Es war ursprünglich ein separates Plugin, wurde aber inzwischen in den Kern integriert, sodass es nicht mehr separat installiert werden muss.

Danke @JammyDodger

Gibt es eine Möglichkeit, Core-Plugins beim Start zu deaktivieren, damit ich testen kann, ob das Chat-Plugin das Problem ist?

Das Bitnami-Chart erlaubt mir, eine Liste von Plugins zu übergeben, und es wird der Befehl RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} für jedes von mir bereitgestellte Plugin ausführen, ABER ich denke, das wird zusätzlich zu den Core-Plugins sein.

Ich werde mir die Standardinstallation noch einmal ansehen – wir stellen alle unsere Drittanbieter-Apps über Helm-Charts in unserem Kubernetes-Cluster bereit, aber vielleicht macht es Sinn, eine Ausnahme für Discourse zu machen, wenn Kubernetes und Helm-Unterstützung noch weit entfernt sind.

Nur ein kurzes Update, es scheint, dass ein Upgrade von einer Version vor 3.0.0 das Upgrade ermöglicht, d. h. 2.8.11 → 3.0.6 → 3.1.1.

Ich bin mir nicht sicher, ob das reiner Zufall ist oder nicht, aber der Versuch, von 3.0.6 direkt auf 3.1.1 zu aktualisieren, funktioniert nicht.

Interessanterweise wird das Chat-Plugin nach diesem Upgrade-Pfad in meiner Discourse-Bereitstellung nicht einmal angezeigt. Es wird angenommen, dass es immer noch als externes Plugin behandelt wird und nicht Teil des Kernprodukts ist.

Weiß jemand, ob das Chat-Plugin mit diesem Upgrade-Pfad korrekt ist oder ob etwas sehr falsch ist, dass es nicht vorhanden ist!

Haben Sie es aktiviert?

Admin → Einstellungen:

image

Es ist immer noch ein Plugin, aber es wird mit dem Kern ausgeliefert, daher funktioniert die Aktivierung etwas anders.

Ich werde meine Installation noch einmal überprüfen, aber ich sehe nicht einmal das Flag.

Ich sehe den Plugin-Code bei diesem Upgrade auch nicht auf dem Server, obwohl ich mir sicher bin, dass ich ihn bei v3.0.6 sehe, aber ich werde alles noch einmal überprüfen.

Wenn Sie das offizielle Repository klonen, ist es enthalten. Hier ist der aktuelle Inhalt des stable-Branches: discourse/plugins/chat at stable · discourse/discourse · GitHub

@merefield - Ich habe gerade nachgesehen: Wenn ich von Version 2.8.11 auf 3.0.6 aktualisiere, ist das Chat-Plugin nicht verfügbar.

Wie oben erwähnt, verwende ich das Bitnami Helm-Diagramm zur Bereitstellung von Discourse, von dem ich weiß, dass es nicht unterstützt wird, aber interessant ist, dass das Chat-Plugin vorhanden ist, wenn ich mit Version 3.0.6 beginne.

Haben Sie das Chat-Plugin vor dem Update aus Ihrer app.yml entfernt? Das sollten Sie tun.

Ich habe nichts mit dem Chat-Plugin gemacht, aber das heißt nicht, dass die Skripte, die Bitnami zum Erstellen ihrer Version des Discourse-Images verwendet, es nicht beeinträchtigen.

Dies ist das Bitnami Discourse Repo - containers/bitnami/discourse at main · bitnami/containers · GitHub und so bauen sie das Docker-Image - https://github.com/bitnami/containers/blob/main/bitnami/discourse/3/debian-11/Dockerfile

Mein Vorschlag? Einfach ein Backup einspielen und zur Standardinstallation wechseln.

@stevejr Ich stecke im selben Dilemma. Konntest du dein Upgrade letztendlich abschließen? Ich kann den Upgrade-Prozess ab 2.8, wie du vorgeschlagen hast, nicht ausprobieren.

Leider nein. Ich habe keine Upgrades durchgeführt und die Antwort von Bitnami war, ein Backup zu erstellen, gefolgt von einer komplett neuen Installation und anschließender Wiederherstellung.

Ich muss dies vollständig testen, da ich unsere Produktionsumgebung nicht beeinträchtigen möchte!

Ich habe verschiedene Ansätze ausprobiert, bei denen eine Neuinstallation gefolgt von einer Wiederherstellung aus einem Backup durchgeführt wurde, aber dies schlägt aufgrund von Fehlern bei der Datenbankmigration fehl. Diese Versuche werden auf einer unabhängigen Entwicklungsbereitstellung durchgeführt, die leicht zurückgesetzt werden kann. Das Wiederherstellungsprotokoll zeigt beispielsweise Folgendes:

...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] Migrating the database...
[2024-02-21 12:43:16] EXCEPTION: /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': Failed to migrate database.
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR:  relation "sidebar_sections" already exists
/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'
...