通知数が不一致で誤っています

運営して1週間ほどの小さなフォーラムを、現在のバージョンに更新したところ、依然として非常に奇妙な動作が見られます。通知数(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

あっ、これを見落としていました…つまり、何かしらの問題が継続して発生しているということです。これは、サーバーがクライアントに対して多数の新しいトピックがあることを伝えているのに、実際に詳細を確認するとそれらが存在しないことを意味します。

これは以前、スケジュールされた投稿で発生したことがあります…あなたはそれを使っていますか?この問題のデバッグは少し厄介です。クライアントが新しいと認識しているトピック ID のリストを取得する必要があります。

もし現在この問題が発生している場合は、以下を実行してください:

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 = 'yourusername' を実行することで ID を確認できます)。

もしこの問題が発生している場合は、Data Explorer をインストールして、何が起きているかを確認してください。

「いいね!」 1

CDN もスケジュール投稿も使用していません。これは Docker 上の Linode VPS で実行されている標準の Discourse インストールで、特別な設定は一切ありません。

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

カスタムプラグインはありますか?ベータブランチですか、それともテスト済みブランチですか?もしベータブランチの場合は、一時的にテスト済みブランチに変更してください。

1 つのプラグイン: 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=#

確認のためですが、現在の状態では、ホームページを読み込むと「New (1)」が表示されますが、「New (1)」をクリックしても新しい投稿は表示されません。ホームに戻ると「New (1)」は消えますが、ページを再読み込みすると再び表示されます。

古いコミットを実行しており、ベータ版ではありません

コンソールから再ビルドしてください。データエクスプローラーは動作するはずです

4078b22887 にいると表示されていますが、これは master からちょうど 1 つ前のコミットです。

ああ、そうでしたか、すみません。サイト設定でデータエクスプローラーを有効にした後も、まだ動作しないことを確認できますか?また、別のブラウザ(Firefox や Chrome)で試して、ワークボックスのエラーが引き続き発生するか確認してもらえますか?

データエクスプローラーの問題は後で対応します。毎回フォーラムを再構築して停止させるのは避けたいので、コマンドラインでクエリを実行します。

現在のステータス: “New (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

「New (4)」をクリックすると、投稿 118、117、116 の 3 つが表示されます。topic_id 31 は表示されません。

ホームに戻るすると「New (3)」と表示されます。

クエリの結果は依然として同じ 4 件を返します。

「いいね!」 4

なるほど、興味深いですね。トピック 31 に移動できますか?何か不審な点はありませんか?これは未読トピック(last_read_post_number は 3)です……クエリによると、あなたには 3 つの新しい投稿と 1 つの未読投稿があるとしています。

もしかすると、あなたのクライアント側で Web Worker のキャッシュに関連する何かが起きているのかもしれません。

Chrome と Firefox のどちらをお使いですか?もう一方を試してみることができますか?また、拡張機能を無効にしたシークレットモードでブラウザを試せますか?

「いいね!」 4

@martin さん、私たちがちょうどバグを発見しました…たまたま、特定のタグをミュートしていますか?

タグをミュートしている状態で、100% タグ付けされていないトピックが一つでも存在すると、カウントが不正になるバグがあります。その結果、それらのトピックが未読リストから欠落してしまいます。

「いいね!」 3

100% 確実ではありませんが、これがまさにあなたの問題かもしれません @aaronpk ……ただ、この修正はもう含まれています:

「いいね!」 6