# 通知数量不一致且错误

**URL:** https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092
**Category:** Bug
**Created:** [2020年五月11日 20:37 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092 "2020-05-11T20:37:17Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月11日 20:37 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/1 "2020-05-11T20:37:17Z")

</div>

我运营着一个刚成立一周的小型论坛，刚刚更新到最新版本，但仍在遇到这种非常奇怪的行为。通知计数（如“新消息”等）似乎与任何实际数量都不对应，而且会随机变化。

目前我看到“新消息 (3)”。

 ![Screen Shot 2020-05-11 at 1.31.37 PM](https://global.discourse-cdn.com/meta/original/3X/f/2/f2352d0274ddc7317bb1b6937d5008b37c85b3da.png)

点击“新消息”后，我没有看到任何新帖子，而且“(3)”的计数也消失了。

 ![Screen Shot 2020-05-11 at 1.32.13 PM](https://global.discourse-cdn.com/meta/original/3X/d/6/d66c916a03c8342694581d3e1793edd1ece629b0.png)

点击返回主页后，菜单中不再显示“新消息 (3)”。

如果我重新加载页面，“新消息 (3)”又会出现。

点击“最新”时，我看到“未读 (2)”，但列表中的任何消息都没有未读标记。

 ![Screen Shot 2020-05-11 at 1.33.40 PM](https://global.discourse-cdn.com/meta/original/3X/3/3/33842d026ec6f1ffe46f47024e892c8f2e1e9316.png)

点击“未读 (2)”后，系统显示没有任何未读消息。

 ![Screen Shot 2020-05-11 at 1.34.03 PM](https://global.discourse-cdn.com/meta/original/3X/8/7/8716e3ffd73b074b70397c2b334387df94dfbd4c.png)

有时当我点击“新消息”时，我没有看到任何新消息，却显示“未读 (1)”的标记。

 ![Screen Shot 2020-05-11 at 1.36.39 PM](https://global.discourse-cdn.com/meta/original/3X/d/2/d2abe0852bd0cb68e24005af3ad85e2c96323e9c.png)

我已经检查了 `/sidekiq/`，一切看起来正常，没有排队或积压的任务。

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [2020年五月11日 22:21 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/2 "2020-05-11T22:21:24Z")

</div>

> [@aaronpk](#):
>
> 我运营着一个刚成立一周的小型论坛，刚刚更新到当前版本，

能否确认您的 Discourse 站点当前运行的版本？该信息应显示在您站点管理仪表板的顶部附近。

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月11日 22:23 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/3 "2020-05-11T22:23:11Z")

</div>

> [@simon](#):
>
> 您能确认您的站点运行的是哪个版本的 Discourse 吗？该信息应显示在您站点管理仪表板的顶部附近。

2.5.0.beta4

( 74db317974 )

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月12日 09:02 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/4 "2020-05-12T09:02:43Z")

</div>

您是否有任何已静音的标签或类别？

您是否有稳定的复现步骤？

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月12日 21:39 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/5 "2020-05-12T21:39:34Z")

</div>

没有任何静音设置，即使论坛中有新活动，这个问题也持续存在。如果您想亲眼看看，欢迎[注册账号](https://forum.livevideotech.today/)。（我尚未确认其他人是否也会看到此问题，还是仅我的账号独有。）

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月12日 21:44 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/6 "2020-05-12T21:44:08Z")

</div>

请查看您的管理部分，是否有警告信息？Sidekiq 是否正在运行？

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月12日 21:56 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/7 "2020-05-12T21:56:03Z")

</div>

没有警告，Sidekiq 看起来没问题。假设我理解正确。

 ![Screen Shot 2020-05-12 at 2.54.54 PM](https://global.discourse-cdn.com/meta/original/3X/7/3/734bf087d2748470a8253a28ac02c4b74e9b3053.png)

 ![Screen Shot 2020-05-12 at 2.55.09 PM](https://global.discourse-cdn.com/meta/original/3X/7/6/76b6bdaff0283058a30d1331567c12d71c031471.png)

---

<div class="post-metadata">

### Author: ![SouperC](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/souperc/32/62875_2.png) [@SouperC](https://meta.discourse.org/u/SouperC)
#### Post date: [2020年五月12日 23:37 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/8 "2020-05-12T23:37:32Z")

</div>

您是否正在使用 Cloudflare 或类似的 CDN？我注意到即使关闭了加速功能，Cloudflare 仍存在一些通知延迟问题，例如 Rocket Loader。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月13日 00:39 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/9 "2020-05-13T00:39:30Z")

</div>

> [@aaronpk](#):
>
> 如果我刷新页面，“新（3）”又会出现了。

哦，我漏掉了这个……所以确实存在持续性的问题。这意味着服务器告诉客户端有很多新主题，但当你深入查看时，这些主题却不存在。

我之前见过这种情况发生在定时发布的帖子中……你们使用定时发布功能吗？调试这个问题有点棘手，我们需要获取客户端认为新的主题 ID 列表。

如果这个问题现在仍然存在，请运行以下 SQL 查询：

```plaintext
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` 替换为你的用户 ID（你可以通过运行 `select id, username from users where username = '你的用户名'` 来查找你的用户 ID）。

如果问题确实存在，能否安装 [Data Explorer](https://meta.discourse.org/t/32566?silent=true) 插件并查看具体发生了什么？

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月13日 02:33 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/10 "2020-05-13T02:33:37Z")

</div>

> [@SouperC](#):
>
> 你使用的是 Cloudflare 还是类似的 CDN？我注意到即使关闭了加速功能，使用 Cloudflare 时仍会出现通知延迟。例如 Rocket Loader。

> [@sam](#):
>
> 我之前见过定时发布帖子时出现这种情况……你使用定时发布功能吗？

没有使用 CDN，也没有定时发布帖子。这只是一个在 Linode VPS 的 Docker 中运行的标准 Discourse 安装，没有任何特殊配置。

我刚刚安装了数据探索插件，现在甚至连设置页面都无法加载。控制台报了一个 JS 错误并导致崩溃：

```plaintext
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)

```

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月13日 02:36 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/11 "2020-05-13T02:36:26Z")

</div>

有任何自定义插件吗？你是在 beta 分支还是 tests-passed 分支？如果你目前在 beta 分支，请暂时切换到 tests-passed。

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月13日 02:52 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/12 "2020-05-13T02:52:01Z")

</div>

一个插件：[GitHub - discourse/discourse-solved: Allow accepted answers on topics · GitHub](https://github.com/discourse/discourse-solved)

我目前使用的是 2.5.0.beta4 版本，这是通过标准安装流程并运行提示的升级后得到的。

我不知道如何切换到特定分支，而且这样做听起来有风险，因为在尝试查找相关方法时，搜索结果中唯一的一条内容显示，有人曾尝试这样做，结果导致了数据库迁移失败。

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月13日 03:03 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/13 "2020-05-13T03:03:12Z")

</div>

> [@sam](#):
>
> 如果现在出现这种情况，请运行：

我在命令行连接到数据库并执行了该查询，但没有返回任何结果：

```plaintext
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)”消失。重新加载页面后，它又会再次出现。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月13日 03:04 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/14 "2020-05-13T03:04:05Z")

</div>

您正在运行一个旧的提交版本，且未处于 beta 模式。

能否从控制台重新构建？数据资源管理器应该可以正常工作。

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月13日 03:06 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/15 "2020-05-13T03:06:21Z")

</div>

> [@sam](#):
>
> 你正在运行一个旧的提交，且不在 beta 分支上。

系统显示我处于 [`4078b22887`](https://github.com/discourse/discourse/commits/4078b2288702346262c9ef2221fe4f47764101a1)，这正好比 [`master`](https://github.com/discourse/discourse/commits/master) 落后一个提交。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月13日 03:38 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/16 "2020-05-13T03:38:27Z")

</div>

哦对了，抱歉，能否确认一下在站点设置中启用后，数据探索器是否仍然无法正常工作？另外，能否尝试在另一个浏览器（如 Firefox 或 Chrome）中打开，看看工作区错误是否依然存在？

---

<div class="post-metadata">

### Author: ![aaronpk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronpk/32/149994_2.png) [@aaronpk](https://meta.discourse.org/u/aaronpk)
#### Post date: [2020年五月13日 14:52 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/17 "2020-05-13T14:52:20Z")

</div>

我稍后再处理数据浏览器的问题，我不想每次修复时都反复重建并关闭论坛。我直接在命令行运行查询。

当前状态：“新（4）”

```plaintext
 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 条记录。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月14日 08:13 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/18 "2020-05-14T08:13:29Z")

</div>

> [@aaronpk](#):
>
> 那个 `topic_id` 31 没有显示出来。

好的，这很有趣。你能跳转到主题 31 吗？它有什么异常吗？这是一个未读主题（last\_read\_post\_number 是 3）……查询结果显示我们认为你有 3 条新消息和 1 条未读消息。

我一直在想，也许是你客户端的 Web Worker 缓存出了问题。

你用的是 Chrome 还是 Firefox……能试试另一个浏览器吗？或者尝试在无痕模式下使用浏览器（禁用所有扩展）？

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月29日 01:14 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/19 "2020-05-29T01:14:43Z")

</div>

哦，@martin 和我刚刚发现了一个 bug…… 碰巧你屏蔽了任何标签吗？

存在一个 bug：如果你屏蔽了标签，并且有任何 100% 未打标签的主题，这些主题最终会缺失在“未读”列表中。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月29日 03:04 UTC](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092/20 "2020-05-29T03:04:05Z")

</div>

我不确定这是否正是您的问题 @aaronpk……但此修复现已包含在以下提交中：

> <https://github.com/discourse/discourse/commit/2acec4370bc8b7bbecf297237c590b1f9d8a8f81>
>
> We previously did not account for completely untagged topics when
> looking at mut…ed tags, this caused new/unread counts to be off if
> 
> 1. You had muted tags
> 2. You had an unread/new topic
> 3. This topic had no tags

[下一頁](https://meta.discourse.org/t/notification-counts-are-inconsistent-and-wrong/151092.md?page=2)
