فشل الترقية (NoMethodError: الطريقة register_bookmarkable غير معرفة لـ Bookmark:Class)

إجراء ترقية في واجهة الويب الإدارية، من 3.1.0.beta2 إلى beta3، أعتقد أنني أكملت ترقية Docker Manager بنجاح ثم فشلت ترقية Discourse الرئيسية كما يلي:

$ yarn install --production
yarn install v1.22.19
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
warning " > @mixer/parallel-prettier@2.0.3" has unmet peer dependency "prettier@^2.0.0".
warning "eslint-config-discourse > eslint-plugin-lodash@7.1.0" has unmet peer dependency "lodash@>=4".
[5/5] Building fresh 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] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning " > babel-plugin-debug-macros@0.4.0-pre1" has unmet peer dependency "@babel/core@^7.0.0".
warning "workspace-aggregator-0156df5c-af27-46bf-a6aa-a0a12748bb32 > discourse > @uppy/xhr-upload@3.1.0" has incorrect peer dependency "@uppy/core@^3.0.6".
[4/4] Building fresh packages...
success Saved lockfile.
Done in 20.00s.
Done in 44.16s.
$ LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all
discourse-data-explorer is already at latest compatible version
docker_manager is already at latest compatible version
$ SKIP_POST_DEPLOYMENT_MIGRATIONS=1 bundle exec rake multisite:migrate
rake aborted!
NoMethodError: undefined method `register_bookmarkable' for Bookmark:Class
Did you mean?  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/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/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
(See full trace by running task with --trace)
Docker Manager: FAILED TO UPGRADE
#<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>'
Spinning up 1 Unicorn worker(s) that were stopped initially

المنتدى قيد التشغيل، ولكن حالة الأمور غير واضحة (بالنسبة لي) - تقترح صفحة الترقية الآن أنني في أحدث إصدار +24، وأن docker_manager محدث عند e90c8f55، وأن Data Explorer هو المكون الوحيد الذي يحتاج إلى ترقية. لكن لوحة التحكم لا تزال تقول أنني في beta2 (b96869d5fb).

ماذا أفعل؟ تخميني الأفضل هو إجراء ترقية عبر سطر الأوامر. لقد وضعت المنتدى في وضع القراءة فقط في الوقت الحالي.

إعجابَين (2)

لقد وجدت بعض التغييرات الأخيرة في الكود التي تبدو مسؤولة، ويبدو أنه ربما يكون هناك تعارض مع إضافة discourse-data-explorer التي لم تعد محدثة لدي.

لذلك، بما أنني أستطيع الاستغناء عن هذه الإضافة في الوقت الحالي، فقد أزلت هذا السطر من ملف app.yml وأعدت البناء. (كان بإمكاني محاولة إعادة البناء كما هي، لكنني بالفعل خارج الخدمة منذ ساعتين.) وقد نجح ذلك، لذا عدت للعمل.

(أرى أن أفعالي هي حل مؤقت، وليست إصلاحًا.)

التغييرات التي قد تكون ذات صلة هي

إعجاب واحد (1)

لقد واجهت نفس الخطأ بالضبط أثناء محاولة الترقية من 3.1.0.beta2 إلى 3.1.0.beta3. حدث هذا في صندوقي غير الإنتاجي الذي أستخدمه “للتدرب” على الترقيات قبل إجرائها على الصندوق الإنتاجي.

في حالتي، تعطل المنتدى بعد أن واجهت الخطأ.

أدى إزالة سطر المكون الإضافي discourse-data-explorer من ملف app.yml الخاص بي وإعادة البناء إلى تجاوز المشكلة.

شكراً جزيلاً لـ @Ed_S لإنقاذي الكثير من الوقت بهذه المشاركة المفيدة!

إعجاب واحد (1)

على كل حال، لقد قمت بإعادة جهاز VM الافتراضي الخاص بي عدة مرات وأعدت تجربة هذا الترقية بطريقتين مختلفتين:

الطريقة رقم 1 - قم بالترقية، ثم قم بإعادة بناء مباشرة بعد الخطأ.

الطريقة رقم 2 - قم بإزالة المكون الإضافي discourse-data-explorer من app.yml، وأعد البناء، وأعد إضافة المكون الإضافي discourse-data-explorer إلى app.yml، وأعد البناء.

بدا أن كليهما يعملان بشكل جيد. سأشير أيضًا إلى أن عمليات إعادة البناء المذكورة أعلاه لها أيضًا تأثير ترقية التثبيت إلى 3.1.0.beta3. ومع ذلك، فإن الخطأ في الطريقة رقم 1 يجعلني قلقًا من أن بعض الملفات أو البيانات قد تُترك في حالة غير مثالية بسبب الترقية المقطوعة. لذلك، من المحتمل أن أقوم بالطريقة رقم 2 في بيئة الإنتاج.

إعجاب واحد (1)

هل رأى أحد هذا الخطأ بدون تثبيت المكون الإضافي discourse-data-explorer؟