أعداد الإشعارات غير متسقة وخاطئة

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

حاليًا، أرى “جديد (3)”

عند النقر على “جديد”، لا أرى أي منشورات جديدة، وتختفي الإشارة “(3)”.

عند العودة إلى الصفحة الرئيسية، لم أعد أرى “جديد (3)” في القائمة.

إذا قمت بإعادة تحميل الصفحة، تعود الإشارة “جديد (3)”.

عند النقر على “الأحدث”، أرى “غير مقروءة (2)”، ومع ذلك لا توجد أي من الرسائل في القائمة تحمل مؤشرًا يشير إلى أنها غير مقروءة.

عند النقر على “غير مقروءة (2)”، يظهر لي أنه لا توجد رسائل غير مقروءة.

في بعض الأحيان، عند النقر على “جديد”، لا أرى أي رسائل جديدة وأرى مؤشر “غير مقروءة (1)”.

لقد تحققت من /sidekiq/ وكل شيء يبدو طبيعيًا، ولا توجد وظائف معلقة أو متراكمة في الطابور.

3 إعجابات

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

3 إعجابات

2.5.0.beta4

( 74db317974 )

إعجابَين (2)

هل لديك أي وسوم أو فئات مخفّضة؟

هل لديك تكرار متسق للمشكلة؟

إعجابَين (2)

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

تحقق من قسم الإدارة، هل توجد أي تحذيرات؟ هل يعمل Sidekiq؟

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

لا توجد تحذيرات، يبدو Sidekiq جيدًا. بافتراض أنني أقرأ هذا بشكل صحيح.

هل تستخدم Cloudflare أو شبكة توصيل محتوى (CDN) مماثلة؟ لقد لاحظت بعض التأخير في الإشعارات مع Cloudflare، حتى مع إيقاف التسريع. على سبيل المثال، Rocket Loader.

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

آه، لقد فاتني هذا… إذن هناك خطأ متسق. هذا يعني أن الخادم يخبر العميل بوجود عدد من المواضيع الجديدة، ولكن عند الدخول إليها، تختفي.

لقد رأيت هذا يحدث من قبل مع المنشورات المجدولة… هل تستخدمها؟ تصحيح هذا الأمر معقد بعض الشيء، فنحن بحاجة إلى الحصول على قائمة معرفات المواضيع (topic_ids) التي يعتقد العميل أنها جديدة.

إذا كان هذا يحدث الآن، فقم بتشغيل الاستعلام التالي:

SELECT 
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_staff_post_number highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
LEFT JOIN category_users ON category_users.category_id = topics.category_id AND category_users.user_id = 1
WHERE u.id = 1 AND
      
      topics.archetype <> 'private_message' AND
      ((1=0) OR ("topics"."deleted_at" IS NULL AND topics.created_at >= GREATEST(CASE
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -1 THEN u.created_at
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -2 THEN COALESCE(u.previous_visit_at,u.created_at)
                  ELSE ('2020-05-13 00:36:29.100619'::timestamp - INTERVAL '1 MINUTE' * COALESCE(uo.new_topic_duration_minutes, 2880))
               END, us.new_since, '2020-05-07 14:46:17') AND tu.last_read_post_number IS NULL AND COALESCE(tu.notification_level, 2) >= 2 AND topics.created_at > '2020-05-07 14:46:17' AND (category_users.last_seen_at IS NULL OR topics.created_at > category_users.last_seen_at))) AND
      
      
      topics.deleted_at IS NULL AND
      
      NOT (
        last_read_post_number IS NULL AND
        COALESCE(category_users.notification_level, 1) = 0
      )

UNION ALL

SELECT 
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_staff_post_number highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
LEFT JOIN category_users ON category_users.category_id = topics.category_id AND category_users.user_id = 1
WHERE u.id = 1 AND
       topics.updated_at >= us.first_unread_at AND 
      topics.archetype <> 'private_message' AND
      (("topics"."deleted_at" IS NULL AND tu.last_read_post_number < topics.highest_staff_post_number AND COALESCE(tu.notification_level, 1) >= 2) OR (1=0)) AND
      
      
      topics.deleted_at IS NULL AND
      
      NOT (
        last_read_post_number IS NULL AND
        COALESCE(category_users.notification_level, 1) = 0
      )

مع استبدال user_id = 1 بمعرف المستخدم الخاص بك (يمكنك العثور عليه بتشغيل select id, username from users where username = 'yourusername').

إذا كان هذا يحدث، هل يمكنك تثبيت أداة استكشاف البيانات (Data Explorer) ومعرفة ما يحدث.

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

لا توجد شبكة توصيل محتوى (CDN)، ولا توجد منشورات مجدولة، هذه مجرد تثبيت قياسي لـ Discourse في Docker على خادم VPS من Linode، لا شيء معقد على الإطلاق.

لقد قمت للتو بتثبيت إضافة Data Explorer والآن لا يمكنني حتى تحميل صفحة الإعدادات. ينهار مع خطأ في JavaScript في وحدة التحكم:

workbox-strategies.prod.js:1 Uncaught (in promise) no-response: no-response :: [{"url":"https://forum.livevideotech.today/admin/site_settings"}]
    at a.makeRequest (https://forum.livevideotech.today/javascripts/workbox/workbox-strategies.prod.js:1:2145)
إعجاب واحد (1)

هل هناك أي إضافات مخصصة؟ هل أنت على فرع الاختبار التجريبي (beta) أم الفرع الذي اجتاز الاختبارات (tests-passed)؟ إذا كنت على الفرع التجريبي، يرجى التبديل إلى الفرع الذي اجتاز الاختبارات مؤقتًا.

إضافة واحدة: GitHub - discourse/discourse-solved: Allow accepted answers on topics · GitHub

أنا أعمل على الإصدار 2.5.0.beta4، وقد وصلت إليها بعد عملية تثبيت قياسية وتشغيل الترقيات التي طُلبت مني.

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

اتصلت بقاعدة البيانات عبر سطر الأوامر ونفذت الاستعلام، ولم تظهر أي نتائج:

discourse(#         last_read_post_number IS NULL AND
discourse(#         COALESCE(category_users.notification_level, 1) = 0
discourse(#       );
 user_id | topic_id | created_at | highest_post_number | last_read_post_number | category_id | notification_level
---------+----------+------------+---------------------+-----------------------+-------------+--------------------
(0 rows)

discourse=#

للتوضيح، في الحالة الحالية، عندما أفتح الصفحة الرئيسية أرى “جديد (1)”، وعند النقر على “جديد (1)” لا أرى أي منشورات جديدة. عند العودة إلى الصفحة الرئيسية تختفي علامة “جديد (1)”، وعند إعادة تحميل الصفحة تظهر مرة أخرى.

أنت تشغل إصدارًا قديمًا من الـ commit، ولم تكن على النسخة التجريبية (beta).

هل يمكنك إعادة البناء من وحدة التحكم؟ يجب أن يعمل مستكشف البيانات.

تقول إنني على 4078b22887 وهو متأخر تمامًا عن master بتخصيص واحد فقط.

أوه، صحيح، آسف. هل يمكنك التأكيد على أن مستكشف البيانات لا يزال معطلاً بعد تفعيله في إعدادات الموقع؟ كما يمكنكَ تجربة متصفح آخر (Firefox/Chrome) لمعرفة ما إذا كانت رسالة خطأ صندوق العمل مستمرة.

سأقوم بالتعامل مع مشكلة مستكشف البيانات لاحقًا، فأنا لا أريد إعادة بناء المنتدى باستمرار وإيقافه في كل مرة. سأقوم بتشغيل الاستعلامات مباشرة من سطر الأوامر.

الحالة الحالية: “جديد (4)”

 user_id | topic_id |         created_at         | highest_post_number | last_read_post_number | category_id | notification_level
---------+----------+----------------------------+---------------------+-----------------------+-------------+--------------------
       1 |      116 | 2020-05-13 06:48:33.784078 |                   1 |                       |           5 |
       1 |      118 | 2020-05-13 07:29:47.423296 |                   1 |                       |           5 |
       1 |      117 | 2020-05-13 06:52:39.448473 |                   1 |                       |          13 |
       1 |       31 | 2020-05-03 14:13:53.109324 |                   4 |                     3 |           7 |                  2

عند النقر على “جديد (4)”، أرى ثلاث منشورات: 118، 117، 116. ولا يظهر topic_id 31.

عند العودة إلى الصفحة الرئيسية، تظهر عبارة “جديد (3)”.

لكن نتائج الاستعلام لا تزال تُرجع نفس الأربعة.

4 إعجابات

حسنًا، هذا مثير للاهتمام. هل يمكنك الانتقال إلى الموضوع 31؟ هل هناك شيء غريب بشأنه؟ هذا موضوع غير مقروء (رقم آخر منشور مقروء هو 3)… تشير الاستعلامات إلى أننا نعتقد أن لديك منشورين جديدين ومنشورًا واحدًا غير مقروء.

ما زلت أعتقد أن هناك شيئًا ما يحدث على جانب العميل لديك متعلقًا بذاكرة التخزين المؤقت لـ Web Worker.

هل تستخدم Chrome أم Firefox… هل يمكنك تجربة المتصفح الآخر… هل يمكنك تجربة متصفحك في وضع التصفح المتخفي بدون أي إضافات؟

4 إعجابات

يا @martin، لقد اكتشفنا للتو خطأً… هل تقوم عن طريق الصدفة بكتم أي وسوم؟

يوجد خطأ يجعل الأعداد غير صحيحة إذا كان لديك وسوم مكتومة وأي مواضيع غير موسومة بنسبة 100%، حيث ينتهي بها الأمر مفقودة من قائمة غير المقروءة.

3 إعجابات

لست متأكدًا بنسبة 100% أن هذه هي مشكلتك بالضبط @aaronpk… لكن هذا الإصلاح موجود الآن في:

6 إعجابات