لوحة تحكم المسؤول معطلة في الإصدار 2.3.2

لقد قمت للتو بالترقية من Discourse 2.2.5 إلى 2.3.2، ويبدو أن هناك تراجعًا في معالجة إحصائيات لوحة تحكم المسؤول، مما أدى إلى حدوث خطأ 500 يمنعني من تحميل لوحة تحكم المسؤول. تظل جميع صفحات المسؤول الأخرى (وصفحات Discourse الأمامية) تعمل بشكل صحيح.

لقد نفذت جميع عمليات ترحيل قاعدة البيانات مع الترقية.

إليك الخطأ ومكدس الاستدعاء الذي حصلت عليه في سجلات الأخطاء (أنا متأكد إلى حد كبير أن هذا هو الخطأ المسؤول عن حدوث الخطأ 500):

TypeError (توقع قيمة رقمية)
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/calculations.rb:104:in `-'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/core_ext/date/calculations.rb:104:in `minus_with_duration'
/usr/src/app/app/models/admin_dashboard_general_data.rb:5:in `get_json'
/usr/src/app/app/models/admin_dashboard_data.rb:24:in `as_json'
/usr/src/app/app/models/admin_dashboard_data.rb:16:in `fetch_stats'
/usr/src/app/app/models/concerns/stats_cacheable.rb:28:in `refresh_stats'
/usr/src/app/app/models/concerns/stats_cacheable.rb:23:in `fetch_cached_stats'
/usr/src/app/app/controllers/admin/dashboard_controller.rb:19:in `general'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/abstract_controller/base.rb:194:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/rendering.rb:30:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:132:in `run_callbacks'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:41:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/rescue.rb:22:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `block in instrument'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `instrument'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/activerecord-5.2.3/lib/active_record/railties/controller_runtime.rb:24:in `process_action'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/abstract_controller/base.rb:134:in `process'
/home/docker/.gem/ruby/2.5.0/gems/actionview-5.2.3/lib/action_view/rendering.rb:32:in `process'
/home/docker/.gem/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiling_methods.rb:104:in `block in profile_method'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal.rb:191:in `dispatch'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_controller/metal.rb:252:in `dispatch'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:34:in `serve'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:48:in `serve'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:52:in `block in serve'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:35:in `each'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:35:in `serve'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:840:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-protection-2.0.5/lib/rack/protection/frame_options.rb:31:in `call'
/usr/src/app/lib/middleware/omniauth_bypass_middleware.rb:32:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:25:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/head.rb:12:in `call'
/usr/src/app/lib/content_security_policy/middleware.rb:12:in `call'
/usr/src/app/lib/middleware/anonymous_cache.rb:220:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232:in `context'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/cookies.rb:670:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
/home/docker/.gem/ruby/2.5.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:98:in `run_callbacks'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/home/docker/.gem/ruby/2.5.0/gems/logster-2.3.0/lib/logster/middleware/reporter.rb:30:in `call'
/home/docker/.gem/ruby/2.5.0/gems/railties-5.2.3/lib/rails/rack/logger.rb:38:in `call_app'
/home/docker/.gem/ruby/2.5.0/gems/railties-5.2.3/lib/rails/rack/logger.rb:28:in `call'
/usr/src/app/config/initializers/100-quiet_logger.rb:18:in `call'
/usr/src/app/config/initializers/100-silence_logger.rb:31:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/usr/src/app/lib/middleware/enforce_hostname.rb:17:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/method_override.rb:22:in `call'
/home/docker/.gem/ruby/2.5.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/executor.rb:14:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111:in `call'
/home/docker/.gem/ruby/2.5.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiler.rb:281:in `call'
/home/docker/.gem/ruby/2.5.0/gems/message_bus-2.2.0/lib/message_bus/rack/middleware.rb:57:in `call'
/usr/src/app/lib/middleware/request_tracker.rb:163:in `call'
/home/docker/.gem/ruby/2.5.0/gems/railties-5.2.3/lib/rails/engine.rb:524:in `call'
/home/docker/.gem/ruby/2.5.0/gems/railties-5.2.3/lib/rails/railtie.rb:190:in `public_send'
/home/docker/.gem/ruby/2.5.0/gems/railties-5.2.3/lib/rails/railtie.rb:190:in `method_missing'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68:in `block in call'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `each'
/home/docker/.gem/ruby/2.5.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `call'
/usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:149:in `accept_and_process_next_request'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop'
/usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:415:in `block (3 levels) in start_threads'
/usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'

مرحباً،

من خلال قراءة تتبع المكدس، أتخيل أن المشكلة تحدث لأن هذا الكود يُرجع nil:

DateTime.now - nil # TypeError: expected numeric

أظن أن كودنا ليس مرناً بما يكفي هنا، حيث نعترف بأنه من الممكن أن يُرجع nil ومع ذلك نستخدمه كما لو أنه لا يمكن أن يكون nil.

@David هل يمكنك إلقاء نظرة من فضلك؟ FEATURE: Display 'last updated' on dashboard, improve release notes l… · discourse/discourse@5666316 · GitHub

5 إعجابات

يبدو ذلك بالفعل المشكلة المرجحة. ولتقديم سياق إضافي، أقوم بتشغيل Discourse داخل حاوية Docker (كما قد تتوقع من تتبع المكدس)، لكنني لا أستخدم مشروع discourse_docker القائم على docker-compose، والصورة التي أستخدمها تقوم بتنزيل ملف tarball للإصدار مباشرة من GitHub بدلاً من استخدام git clone، لذا لن تعمل أي من المنطقيات المعتمدة على git داخل التطبيق.

لقد اعتدت تمامًا على أن حقل “الإصدار المثبت” في لوحة التحكم لا يعرض الإصدار الفعلي المثبت لدي. لقد كان الأمر كذلك لأطول فترة أتذكرها، رغم أنه على الأقل لم يكن يعطل لوحة التحكم من قبل.

ولكن بدافع الفضول، هل يمكن لهذه الوظيفة أن تعتمد على آلية احتياطية لجلب الإصدار من مصدر آخر غير git؟ ليس بالأمر المهم إذا لم يكن ذلك ممكنًا، فليس لدي أي إزعاج من عدم قدرتي على معرفة الإصدار الذي أعمل عليه من خلال لوحة التحكم.

هذا يجب أن يحل المشكلة بالنسبة لك:
FIX: Allow dashboard to load even when git version cannot be found · discourse/discourse@ca9ef58 · GitHub

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

4 إعجابات

شكرًا لك يا ديفيد، سأراسلك إذا واجهت أي مشاكل في ذلك.