未读计数显示“未读 (14)”,但 /unread 为空

好的,这个 Rails 脚本将作为全局“全部标记为已读”功能,强制将所有用户的 unread(未读)计数重置为 0。因此,很遗憾,它不仅会清除那些虚假的未读标记,也会清除任何真实的未读计数。我们可以在 Rails 中通过 SQL 命令实现这一点。但请注意,这并不能修复根本的 bug。另外,如果你手边有最近的备份,这是个很好的主意;不过我已经在我的开发论坛测试过,它运行正常。

cd /var/discourse
./launcher enter app
rails c

粘贴以下整个代码块并按回车键执行

sql = <<~SQL
  UPDATE topic_users
  SET last_read_post_number = topics.highest_post_number
  FROM topics
  WHERE topics.id = topic_users.topic_id
    AND COALESCE(topic_users.last_read_post_number, 0) < topics.highest_post_number
    AND topic_users.notification_level IN (2, 3, 4) -- 跟踪、关注、关注首帖
SQL

# 执行更新
result = ActiveRecord::Base.connection.execute(sql)
puts "已成功全站清除 #{result.cmd_tuples} 个未读主题。"

# 强制客户端浏览器清除缓存状态并与数据库同步
MessageBus.publish("/topic-tracking-state", { clear: true })

用户可能需要强制刷新页面才能看到已清除的 unread(未读)状态。

3 个赞