Я пытаюсь обновить установку Discourse с тега образа 3.0.6 до 3.1.1, но столкнулся с проблемой, описанной ниже. Я знаю, что использую установку, которая считается неподдерживаемой — с помощью Bitnami Helm Chart в кластере Kubernetes, — но я совершенно не знаю, как это исправить.
Ошибка ниже возникает при попытке обновить стандартную установку Discourse (без дополнительных плагинов) до последней версии. Просматривая форум, я нашел эту тему — Upgrade failed (NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class) — но в ней речь идет о плагине discourse-data-explorer, который, как я уже упоминал, не установлен в стандартной установке Bitnami Discourse.
Может ли кто-нибудь помочь?
Спасибо,
Стив
discourse 07:39:04.07 INFO ==> Выполнение миграций базы данных
rake aborted!
NoMethodError: undefined method `register_bookmarkable' для 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>'
Я думаю, что первым шагом, если это обновление на основе веб-технологий, будет командная строка для обновления — подключитесь к вашему хосту через SSH и выполните:
cd /var/discourse
git pull
./launcher rebuild app
(Предполагая, что ваш файл конфигурации называется app.yml)
Редактирование: однако, похоже, что более вероятное расположение вашей установки — /opt/bitnami/discourse. Именно такие различия приводят к использованию тега “unsupported-install” и рекомендации обратиться к вашему поставщику.
Спасибо @Ed_S, я попробую выполнить обновление вручную.
Я открыл запрос в службу поддержки Bitnami, и они сообщают, что проблема связана с образом, в данном случае — образом Discourse. Я попросил их ещё раз проверить ситуацию, так как обновление между версиями их Helm-чартов должно было быть протестировано Bitnami, и любые выявленные проблемы, надеюсь, были бы устранены совместно командой Bitnami и командой Discourse.
Вопрос: ошибка, которую я вижу, похоже, исходит из плагина Chat, который является официально поддерживаемым. Имеет ли это значение для команды Discourse при рассмотрении этой ошибки?
Я попробую отключить его, затем выполню обновление и посмотрю, как всё пойдёт.
Я думаю, что при установке через Bitnami иногда возникают проблемы совместимости между их версией и обновлёнными плагинами.
Если вы сможете перейти на стандартную установку, у вас может всё пройти проще (а также вы сможете получить поддержку от большего числа участников здесь).
Есть ли способ отключить основные плагины при запуске, чтобы я мог проверить, является ли проблема плагином чата?
Чарт Bitnami позволяет передать список плагинов, и он выполнит команду RAILS_ENV=production bundle exec rake plugin:install repo={{ $plugin }} для каждого указанного плагина, НО, как я понимаю, это будет добавлено поверх основных плагинов.
Я ещё раз изучу стандартную установку — мы разворачиваем все наши сторонние приложения с помощью чартов Helm в нашем кластере Kubernetes, но, возможно, имеет смысл сделать исключение для Discourse, если поддержка Kubernetes и Helm ещё долго не появится.
Короткое обновление: похоже, что обновление с версии до 3.0.0 позволяет процессу обновления пройти успешно, например: 2.8.11 → 3.0.6 → 3.1.1.
Не уверен, является ли это чистой случайностью или нет, но попытка обновиться напрямую с версии 3.0.6 до 3.1.1 не удаётся.
Интересно, что плагин Chat даже не отображается в моей развёрнутой версии Discourse после такого пути обновления. Считается, что он всё ещё рассматривается как внешний плагин, а не как часть основного продукта.
Кто-нибудь знает, корректен ли плагин Chat для этого пути обновления, или что-то серьёзно не так, раз его нет!
@merefield — Я только что проверил: если обновиться с версии 2.8.11 до 3.0.6, плагин Chat недоступен.
Как упоминалось выше, я использую Helm-чарт Bitnami для развёртывания Discourse, что, как я знаю, не поддерживается. Однако интересно то, что если начать сразу с версии 3.0.6, плагин Chat присутствует.
Я ничего не делал с плагином Chat, но это не значит, что скрипты, которые использует Bitnami для сборки своей версии образа Discourse, не влияют на него.
@stevejr Я застрял в той же ситуации. Вам в итоге удалось завершить обновление? Я не могу попробовать процесс обновления, начиная с версии 2.8, как вы предложили.
К сожалению, нет. Я не выполнял никаких обновлений, и ответ от Bitnami заключался в создании резервной копии, затем полной чистой установке и последующем восстановлении.
Мне нужно полностью протестировать это, так как я не хочу влиять на нашу рабочую среду!
Я пробовал различные варианты подхода с чистой установкой и последующим восстановлением из резервной копии, но это не удаётся из-за того, что, по-видимому, являются ошибками в миграции базы данных. Эти попытки выполняются на независимом тестовом развёртывании, которое легко сбросить. В журнале восстановления, например, отображается следующее:
...
[2024-02-21 12:43:12] ALTER TABLE
[2024-02-21 12:43:12] Выполняется миграция базы данных...
[2024-02-21 12:43:16] ИСКЛЮЧЕНИЕ: /opt/bitnami/discourse/lib/discourse.rb:138:in `exec': Не удалось выполнить миграцию базы данных.
rake aborted!
StandardError: Произошла ошибка, поэтому эта и все последующие миграции отменены:
PG::DuplicateTable: ОШИБКА: отношение "sidebar_sections" уже существует
/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'
...