خطأ في ترقية Discourse من v3.0.6 إلى v3.1.1 - undefined method `register_bookmarkable' for Bookmark:Class

مرحباً،

أحاول ترقية تثبيت 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  ==> 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>'

أعتقد أن الحل الأول، إذا كان هذا تحديثًا قائمًا على الويب، سيكون ترقية عبر سطر الأوامر - اتصل بمضيفك عبر ssh وقم بتنفيذ

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

(بافتراض أن اسم ملف التكوين الخاص بك هو app.yml)

تحرير: باستثناء، يبدو أن /opt/bitnami/discourse هو المكان الأكثر احتمالاً لتثبيتك. إنها اختلافات مثل هذه التي تؤدي إلى علامة “unsupported-install” وتقديم المشورة بالاتصال بالمورد الخاص بك.

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

شكراً @Ed_S، سأقوم بتجربة الترقية اليدوية.

لقد قمت بفتح مشكلة دعم مع Bitnami وهم يذكرون أنها مشكلة في الأصل (asset) والذي هو في هذه الحالة صورة Discourse. لقد سألتهم عما إذا كان بإمكانهم النظر في الأمر مرة أخرى حيث أن الترقية بين إصدارات مخطط Helm الخاصة بهم يجب أن تكون قد تم اختبارها بواسطة Bitnami وأي مشاكل يرونها نأمل أن تكون قد تم حلها بين Bitnami وفريق Discourse.

إعجابَين (2)

أنا متأكد من أن Bitnami لا يعمل مع فريق Discourse.

إذا لم يتمكنوا من المساعدة وكان لديك ميزانية، يمكنك الاتصال بي. ربما يمكنني بناء صورة لك تعمل.

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

شكرا @pfaffman

سؤال - الخطأ الذي أراه يبدو أنه من المكون الإضافي للدردشة، وهو مكون إضافي مدعوم رسميًا - هل هذا يحدث فرقًا فيما يتعلق بفريق Discourse الذي ينظر في الخطأ؟

سأحاول تعطيله ثم إجراء الترقية ومعرفة كيف يسير الأمر.

أعتقد أنه مع تثبيتات Bitnami قد تكون هناك أحيانًا مشكلات عدم توافق بين إصدارهم والإضافات المحدثة.

إذا كان بإمكانك الانتقال إلى تثبيت قياسي، فقد يكون الأمر أسهل بالنسبة لك (بالإضافة إلى الحصول على الدعم من المزيد من الأشخاص هنا أيضًا).

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

يتم تضمين المكون الإضافي للدردشة. إذا كنت تقوم أيضًا بتثبيت المكون الإضافي للدردشة (أعتقد أنه كان منفصلاً لفترة؟) فقد تكون هذه هي المشكلة.

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

هذا صحيح. كان في البداية مكونًا إضافيًا منفصلاً ولكنه تم تجميعه منذ ذلك الحين مع النواة، لذلك لا داعي لتثبيته بشكل منفصل بعد الآن.

شكرا @JammyDodger

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

تسمح لي مخططات 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 plugin) لا تظهر في تثبيت Discourse الخاص بي بعد مسار الترقية هذا. يُعتقد أنها لا تزال تُعامل كإضافة خارجية بدلاً من كونها جزءًا من المنتج الأساسي.

هل يعرف أي شخص ما إذا كانت إضافة الدردشة صحيحة مع مسار الترقية هذا أم أن هناك خطأ فادحًا في عدم وجودها!

هل قمت بتمكينه؟

مسؤول → الإعدادات:

image

لا يزال مكونًا إضافيًا ولكنه يأتي مع النواة، لذا فإن تمكينه يعمل بشكل مختلف قليلاً.

سأتحقق مرة أخرى من تثبيتي ولكني لا أرى العلامة حتى.
لا أرى كود الإضافة على الخادم أيضًا مع هذا التحديث بينما إذا بدأت بـ v3.0.6 أنا متأكد من أنني أفعل ذلك ولكن سأتحقق من كل شيء مرة أخرى.

إذا كنت تستنسخ المستودع الرسمي، فهو مضمن، إليك المحتويات الحالية لفرع stable: discourse/plugins/chat at stable · discourse/discourse · GitHub

@merefield - لقد تحققت للتو، إذا قمت بالترقية من الإصدار 2.8.11 إلى 3.0.6، فلن يكون المكون الإضافي للدردشة متاحًا.

كما ذكرت أعلاه، أستخدم مخطط Bitnami Helm لنشر Discourse، والذي أعرف أنه غير مدعوم، ولكن المثير للاهتمام هو أنه إذا بدأت بالإصدار 3.0.6، فإن المكون الإضافي للدردشة موجود.

هل قمت بإزالة المكون الإضافي للدردشة من ملف app.yml الخاص بك قبل التحديث؟ يجب عليك ذلك.

لم أفعل شيئًا مع مكون الدردشة الإضافي، لكن هذا لا يعني أن البرامج النصية التي تستخدمها Bitnami لبناء نسختهم من صورة Discourse لا تؤثر عليها.

هذا هو مستودع Bitnami Discourse - containers/bitnami/discourse at main · bitnami/containers · GitHub وهذا هو كيف يبنون صورة Docker - https://github.com/bitnami/containers/blob/main/bitnami/discourse/3/debian-11/Dockerfile

اقتراحي؟ فقط قم بتفريغ نسخة احتياطية وانتقل إلى التثبيت القياسي.

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