مشكلة في الوصول إلى صفحات محددة عند تسجيل الدخول

مرحبًا يا مجتمع Discourse!

نُشغّل إصدار Discourse 2.4.5 عبر Docker على آلة افتراضية تعمل بنظام Debian. تظهر رسالة الخطأ التالية:

NoMethodError (لا توجد طريقة automatic_membership_retroactive في الكائن #Group:0x00007fb84804bac0)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_methods.rb:431:in `method_missing’

… في سجلات Discourse عند محاولة الوصول إلى بعض الصفحات كمستخدم مسجّل الدخول (ومستوى إداري في حالتي):

المشكلة لا تظهر فقط على صفحتي الشخصية (/u/mathieugp)، بل تؤثر على جميع الملفات الشخصية التي تُنتج خطأً في سجل أخطاء Discourse وتُظهر خطأً من نوع 500 على جانب العميل. في بعض الأحيان، يظهر خطأ 404 في السجل عند تحميل صفحات أخرى معينة (صفحات فرعية حسب ما أستطيع تحديده) مثل:

  • /u/mathieugp/summary

يمكنني عرض صفحتي الشخصية (وصفحات المستخدمين الآخرين) عندما لا أكون مسجّل الدخول. من الواضح أنني لا أستطيع عرض أي شيء مفيد من إدارة المجموعات عندما لا أكون مسجّل الدخول، لكن لا يتم عرض أي خطأ غير معتاد أيضًا.

إليك تتبع الاستدعاء الكامل من سجل Discourse:

> activemodel-6.0.1/lib/active_model/attribute_methods.rb:431:in `method_missing'
> active_model_serializers-0.8.4/lib/active_model/serializer.rb:99:in `block in attribute'
> (eval):12:in `_fast_attributes'
> active_model_serializers-0.8.4/lib/active_model/serializer.rb:468:in `rescue in attributes'
> active_model_serializers-0.8.4/lib/active_model/serializer.rb:455:in `attributes'
> active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in `_serializable_hash'
> active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in `serializable_hash'
> active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:89:in `block in _serializable_array'
> active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:79:in `map'
> active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:79:in `_serializable_array'
> active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:73:in `serializable_array'
> active_model_serializers-0.8.4/lib/active_model/array_serializer.rb:53:in `as_json'
> /var/www/discourse/app/controllers/application_controller.rb:427:in `serialize_data'
> /var/www/discourse/app/controllers/groups_controller.rb:91:in `index'
> actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
> actionpack-6.0.1/lib/abstract_controller/base.rb:196:in `process_action'
> actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
> actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
> activesupport-6.0.1/lib/active_support/callbacks.rb:135:in `run_callbacks'
> actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
> actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
> actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
> activesupport-6.0.1/lib/active_support/notifications.rb:180:in `block in instrument'
> activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
> activesupport-6.0.1/lib/active_support/notifications.rb:180:in `instrument'
> actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
> actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
> activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
> actionpack-6.0.1/lib/abstract_controller/base.rb:136:in `process'
> actionview-6.0.1/lib/action_view/rendering.rb:39:in `process'
> rack-mini-profiler-1.1.6/lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'
> actionpack-6.0.1/lib/action_controller/metal.rb:191:in `dispatch'
> actionpack-6.0.1/lib/action_controller/metal.rb:252:in `dispatch'
> actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
> actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
> actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49:in `block in serve'
> actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `each'
> actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `serve'
> actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837:in `call'
> /var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
> rack-2.0.8/lib/rack/tempfile_reaper.rb:15:in `call'
> rack-2.0.8/lib/rack/conditional_get.rb:25:in `call'
> rack-2.0.8/lib/rack/head.rb:12:in `call'
> /var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
> /var/www/discourse/lib/middleware/anonymous_cache.rb:318:in `call'
> rack-2.0.8/lib/rack/session/abstract/id.rb:259:in `context'
> rack-2.0.8/lib/rack/session/abstract/id.rb:253:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
> activesupport-6.0.1/lib/active_support/callbacks.rb:101:in `run_callbacks'
> actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
> logster-2.6.3/lib/logster/middleware/reporter.rb:43:in `call'
> railties-6.0.1/lib/rails/rack/logger.rb:38:in `call_app'
> railties-6.0.1/lib/rails/rack/logger.rb:28:in `call'
> /var/www/discourse/config/initializers/100-quiet_logger.rb:18:in `call'
> /var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
> /var/www/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
> rack-2.0.8/lib/rack/method_override.rb:22:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
> rack-2.0.8/lib/rack/sendfile.rb:111:in `call'
> actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77:in `call'
> rack-mini-profiler-1.1.6/lib/mini_profiler/profiler.rb:184:in `call'
> message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57:in `call'
> /var/www/discourse/lib/middleware/request_tracker.rb:181:in `call'
> railties-6.0.1/lib/rails/engine.rb:526:in `call'
> railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'
> railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'
> rack-2.0.8/lib/rack/urlmap.rb:68:in `block in call'
> rack-2.0.8/lib/rack/urlmap.rb:53:in `each'
> rack-2.0.8/lib/rack/urlmap.rb:53:in `call'
> unicorn-5.5.3/lib/unicorn/http_server.rb:605:in `process_client'
> unicorn-5.5.3/lib/unicorn/http_server.rb:700:in `worker_loop'
> unicorn-5.5.3/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
> unicorn-5.5.3/lib/unicorn/http_server.rb:144:in `start'
> unicorn-5.5.3/bin/unicorn:128:in `<top (required)>'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

أرجو إخباري بأي معلومات أخرى قد تكون مفيدة لفهم الخطأ بشكل أفضل.

يجب أن أذكر بعض المشاكل السابقة التي واجهناها مع الوصول إلى بعض الصفحات في نسخة Discourse الخاصة بنا. لفترة من الوقت، لم أستطع حتى الوصول إلى منطقة الإدارة على الإطلاق. بدا أن هذه المشكلة اختفت تمامًا بعد تشغيل الأمر التالي:

# ./launcher rebuild app

تمكّنت مرة أخرى من الوصول إلى منطقة الإدارة، لكنني لم ألاحظ عدم قدرتي على إدارة المجموعات. اكتشفت ذلك بعد عدة أسابيع عندما احتجت إلى إضافة مستخدم إلى مجموعة. لست متأكدًا بشأن عرض الملفات الشخصية للأسف: يبدو أنه لم يكن بإمكاني تجاهل شيء كبير كهذا، لكن ربما لم أكن مسجّل الدخول في بعض الأحيان وافترضت أن كل شيء على ما يرام بينما لم يكن كذلك؟ أو ربما لم تكن مشكلة عرض الملفات الشخصية موجودة في البداية وظهرت لاحقًا. (آسف على غموض هذه العبارات الأخيرة: لا أستطيع التذكر بشكل مؤكد ولا يوجد أثر يمكنني متابعته!)

انتظر، هل أنت على الفرع “المستقر” هنا؟ هل يمكنك الانتقال إلى النسخة التجريبية؟ هذا التتبع الخلفي إما من النسخة المستقرة أو من إصدار أقدم من Discourse.

يبدو لي أن مثالك مُهجَّر جزئيًا؟

@سام نعم، نحن على قناة الإصدار “المستقر” حسب علمي. هل فهمتُ بشكل صحيح أنك تقترح علينا الترقية من الإصدار المستقر إلى أحدث إصدار تجريبي لمحاولة تجاوز المشكلة؟ هل سيكون الانتقال إلى قناة “اختبارات-ناجحة” كافياً؟

الانتقال إلى tests-passed سيكون مقبولاً أيضًا، ولكن تذكر أنه يمكنك العودة إلى beta أو stable فقط في اليوم الذي نطلق فيه إصدارًا من beta أو stable.

يبدو أن الترحيل من الإصدار 2.4.5 إلى 2.5.0 قد حلّ المشكلة. شكرًا جزيلاً لك سام! :slight_smile: