Количество уведомлений не совпадает и неверно

Я администрирую очень маленький форум, который существует всего неделю. Только что обновился до текущей версии, но наблюдаю очень странное поведение. Счётчики уведомлений (New и т. д.) не соответствуют никаким реальным значениям и меняются произвольно.

Сейчас я вижу «New (3)».

При нажатии на «New» новых постов нет, а «(3)» исчезает.

При возврате на главную страницу в меню больше не отображается «New (3)».

Если перезагрузить страницу, «New (3)» появляется снова.

При нажатии на «Latest» я вижу «Unread (2)», однако ни одно из сообщений в списке не помечено как непрочитанное.

При нажатии на «Unread (2)» оказывается, что непрочитанных сообщений нет.

Иногда при нажатии на «New» я не вижу новых сообщений, но появляется индикатор «Unread (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 = 'ваш_ник')

Если проблема возникает, пожалуйста, установите расширение Data Explorer и проверьте, что именно происходит.

1 лайк

Никакой CDN, никаких запланированных постов. Это стандартная установка Discourse в Docker на VPS от Linode, без каких-либо дополнительных настроек.

Я только что установил плагин Data Explorer, и теперь страница настроек даже не загружается. Она падает с ошибкой JS в консоли:

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? Если вы на ветке 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)» исчезает. После перезагрузки страницы она появляется снова.

Вы используете старый коммит и не находитесь в бета-версии.

Можете ли вы пересобрать проект из консоли? Data Explorer должен работать.

В системе указано, что я нахожусь на 4078b22887, что ровно на один коммит отстаёт от master.

Ах, точно, извините. Можете подтвердить, что «Исследователь данных» всё ещё не работает после его включения в настройках сайта? Также попробуйте открыть в другом браузере (Firefox/Chrome) — сохраняется ли ошибка в поле «Рабочая область»?

Я займусь проблемой с Data Explorer позже, так как не хочу постоянно пересобирать форум, выводя его из строя каждый раз. Я просто выполню запросы через командную строку.

Текущий статус: «Новые (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 записи.

4 лайка

Хм, это интересно. Можешь перейти к теме 31 — что-то в ней выглядит необычно? Это непрочитанная тема (last_read_post_number = 3)… Запрос показывает, что у тебя 3 новых и 1 непрочитанное сообщение.

Мне всё ещё кажется, что что-то происходит на стороне клиента у тебя, возможно, из-за кэширования веб-воркеров.

Ты используешь Chrome или Firefox? Попробуй другой браузер. Можешь также запустить свой браузер в режиме инкогнито без расширений?

4 лайка

О, @martin, мы только что обнаружили баг… Не mute-ите ли вы случайно какие-либо теги?

Существует баг, при котором счётчики сбиваются, если у вас есть замьюченные теги и ЛЮБЫЕ темы без тегов — они в итоге пропадают из списка непрочитанных.

3 лайка

Я не на 100% уверен, что это именно ваша проблема @aaronpk… но это исправление уже включено в:

6 лайков