منذ تحديث 2.8.0beta2 ، لا يمكن لبعض المستخدمين الوصول إلى التفضيلات (إلخ)

في وقت سابق من هذا الأسبوع، قمت بالترقية من الإصدار 2.7.0.beta2 إلى 2.8.0.beta2. منذ ذلك الحين، لا يمكن لحسابي العادي (ولكن ليس حساب المسؤول) الوصول إلى أي من صفحات /u/ الخاصة بي. بدلاً من ذلك، أحصل على خطأ 404. يحدث هذا على سطح المكتب (Firefox 84 و 89) وعلى الهاتف المحمول (تم اختباره على Android)، وبعد تسجيل الخروج، ومسح ذاكرة التخزين المؤقت، والعودة.

أعتقد أن هذا التغيير مرتبط بالمشكلة التالية:

لقد كان لديّ مُدخَل discourse-user-card-badges مُثبّتًا (يظهر بإصدار 0.1) منذ فترة طويلة قبل هذه الترقية، وهذا التغيير بالإضافة إلى الخطأ أدناه يجعلني أعتقد أن المدخّل ربما لا يتوافق مع التغييرات الجديدة؟ إذا كان الأمر كذلك، ألا ينبغي للترقية تعطيل المدخّل أو طلب مني تعطيله؟

activemodel (6.1.3.2) lib/active_model/attribute_methods.rb:469:in `method_missing'
plugins/discourse-user-card-badges/plugin.rb:40:in `block (2 levels) in activate!'
(eval):93: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/serializer.rb:343:in `as_json'
activesupport (6.1.3.2) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.3.2) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.3.2) lib/active_support/core_ext/object/json.rb:43:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/application_controller.rb:519:in `render_json_dump'
app/controllers/users_controller.rb:94:in `block (2 levels) in show'
actionpack (6.1.3.2) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
app/controllers/users_controller.rb:86:in `show'
actionpack (6.1.3.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.3.2) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.3.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.3.2) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:395:in `block in with_resolved_locale'
i18n (1.8.10) lib/i18n.rb:314:in `with_locale'
app/controllers/application_controller.rb:395:in `with_resolved_locale'
activesupport (6.1.3.2) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.3.2) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.3.2) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.3.2) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.3.2) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.3.2) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.3.2) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.3.2) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.3.2) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.3.2) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.3.2) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.2) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'


actionpack (6.1.3.2) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.3.2) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.3.2) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.3.2) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.3.2) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.3.2) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.3.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.9.6) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.3.2) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.3.2) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.3.2) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (2.3.2) lib/mini_profiler/profiler.rb:249:in `call'


message_bus (3.3.6) lib/message_bus/rack/middleware.rb:61:in `call'
lib/middleware/request_tracker.rb:177:in `call'
railties (6.1.3.2) lib/rails/engine.rb:539:in `call'
railties (6.1.3.2) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.3.2) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.0.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.0.0) lib/unicorn/http_server.rb:732:in `worker_loop'
unicorn (6.0.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.0.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.0.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:23:in `<main>'

هل هذه إضافة من طرف ثالث؟ إذن هل لديك خطة لتعطيل الإضافة؟

يبدو أن الإضافة رسمية. عند النقر عليها، يتم توجيهي إلى:

ونعم، تعطيل الإضافة يحل مشكلة 404. سؤالي هو: لماذا يُعتبر هذا الإجراء يدوياً، علماً أنني كنت أظن أن هذه إضافة رسمية وستستمر في العمل؟

هل هذه وظيفة قمنا بنقلها من الإضافة إلى النواة؟

في هذه الحالة، يجب أن نضع إشعار إهمال على الإضافة.. ما رأيك @neil؟

سأشير إلى أنه قبل النشر، قمت بالتحقق ولاحظت أن آخر التزام (commit) في الإضافة أحدث من إصدار 2.8.0beta2. عند إعادة النظر، أرى أن الالتزام صادر من مستخدم “روبوت”، لذا قد لا يكون مؤشرًا على شيء ذي أهمية.

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

يوضح هذا المنشور Why does eviltrout have a garbage man badge? النسخة المبكرة من ميزة الشارات:

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

أعتقد أن الأمر يتعلق بالعمود الجديد is_favorite الذي أُضيف إلى جدول UserBadges.

من المرجح أن كود SQL معطل الآن.

UserBadge.attribute_names.map do |name|
              if name == 'is_favorite'
                "BOOL_OR(user_badges.#{name}) AS is_favorite"
              else
                "MAX(user_badges.#{name}) AS #{name}"
              end
            end

لقد دمجت للتو إصلاحًا للإضافة:

تمت إزالة عمود image من Badge في https://github.com/discourse/discourse/commit/a23d0f996132746b29c17644a58b3bd00c7144ae، وقمنا بتحديث الإضافة جزئيًا آنذاك لكننا أغفلنا بعض الأماكن.

بينما نسعى جاهدين لمنع التغييرات الأساسية من كسر الإضافات، فإننا أحيانًا إما نغفل بعض الاستخدامات أو أن إضافاتنا تفتقر إلى تغطية الاختبارات (نُجري اختبارات لجميع الإضافات الرسمية في كل مرة يُجرى فيها تغيير على الأساس). في الالتزام المذكور أعلاه، أضفت المزيد من الاختبارات إلى إضافة discourse-user-card-badges لمنع حدوث مشاكل مماثلة في المستقبل.

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