スレッド内の返信が順不同で表示される

最近 2.6.0.beta3 に更新した後、スレッド内のいくつかの返信が順序正しく表示されなくなっています。タイムスタンプは正しく表示されますが、影響を受けた返信は常にスレッドの最下部に配置されてしまいます。

再度更新を試み、影響を受けたトピックに対して rake posts:reorder_posts を実行しましたが、効果はありませんでした。順序を正しく修正するために他にできることはありますか?それともこれは Discourse のバグでしょうか?すべてのユーザーに対して投稿の表示順序は同じです。

あるトピックからの例を以下に示します。これはスレッドの最下部です:

もしかして、最後の2つの投稿をそのトピックに移動させましたか?その場合、それは期待される動作です。

いいえ、それらは常にそのトピック内にあり、アップグレード前には返信の順序も期待通りでした。

これは特定のトピックに限らず、どうやらすべてのトピックで発生しています。本来末尾にあってはいけない返信が、末尾に一つか二つあります。

私も同じ問題に直面しました。

いいえ、投稿をトピックに移動はしていませんが、スレッド内の返信が順序通りに表示されていません。

posts:reorder_posts からクエリを実行すると、いくつかの投稿の sort_order が奇妙な値になっていることがわかります。rake タスクで更新されるはずですが、実際には更新されません。


以下を実行して確認しました:

SELECT
id,
post_number,
sort_order,
ROW_NUMBER() OVER (
    PARTITION BY
    topic_id
    ORDER BY
    created_at,
    post_number
) AS new_post_number
FROM
posts

rake タスクを手動で再作成しようとした際、以下の SQL を実行しました:

WITH ordered_posts AS (
  SELECT
    id,
    ROW_NUMBER() OVER (
      PARTITION BY
        topic_id
      ORDER BY
        created_at,
        post_number
    ) AS new_post_number
  FROM
    posts
  /*where*/
)
SELECT
  p.post_number,
  p.sort_order,
  o.new_post_number
FROM
  posts AS p, ordered_posts AS o
WHERE
  p.id = o.id

その結果は以下の通りです:

これにより、rake タスクが何も実行しない理由がわかります。タスクは何も行うべきことがないと判断しているのです。rake タスクには、sort_order ではなく post_numbernew_post_number を比較する追加の where 条件が含まれています。

その後、データベースに対して手動で以下の SQL を実行しました:

WITH ordered_posts AS (
  SELECT
    id,
    ROW_NUMBER() OVER (
      PARTITION BY
        topic_id
      ORDER BY
        created_at,
        post_number
    ) AS new_post_number
  FROM
    posts
  /*where*/
)
UPDATE
  posts AS p
SET
  sort_order = o.new_post_number
FROM
  ordered_posts AS o
WHERE
  p.id = o.id AND
  p.sort_order <> o.new_post_number

その結果、投稿が正しい順序で表示されるようになりました。

なぜこのような状態になったのか、まだ理解できません。この部分に手を加えるのは、投稿を移動させる時だけです。

Post Creator は単に sort_order を post_number に設定します。

長期的には、sort_order カラム自体を維持したくないとも思っています。どうやら、これは一種の「足元をすくわれるような罠」のようです。

ここに関与するプラグインはありますか?

私にもわかりません。コードを確認しても、その理由は見つかりませんでした。何かがソート順を変更しているようですが、それが何なのかは確認できません。

アップグレードを実行した際に、順序が崩れたと感じました。順序が崩れたメッセージは一般的にかなり古く、以前は期待された場所に表示されていたからです。上記の SQL を実行したときはすべて問題ないように見えたのですが、先週になって、いくつかの新しい投稿も順序が崩れて表示されるようになりました。影響を受けている投稿は、常に他の投稿への返信のようです。例:

以下のプラグインがインストールされています:

おそらく「question-answer」プラグインがソート順を変更しているのでしょうが、それは質問トピックにのみ影響し、一般的なトピックには影響しないはずです。

私も同じ問題が発生しています。以前、長いトピックで投稿を移動する際に502エラーが発生したことがありますが、それが関係しているかどうかはわかりません。また、質問・回答プラグインをインストールしていますが、これを無効にした後も、投稿がトピックの下部に表示される現象が引き続き発生しています。

おそらく、これは公式にサポートされているプラグインではないため、sort_order は Discourse コア内でも一貫して使用されておらず、このカラムの削除を検討しています。

これは非公式プラグインのバグと見なせるため、Support に移動します。

@angus この問題を確認してもらえますか?このプラグインをインストールしたところ、サイト全体で返信の順序が崩れるようになりました。プラグインを削除した後も、まだ順序が崩れたままです。

単一の投稿における順序が崩れた返信を修正できるか確認するため、1つの投稿で以下のコマンドを実行してテストを行いました(Q&A プラグインを削除した後)。

rake posts:reorder_posts[1896]

しかし、残念ながら投稿は依然として順序が崩れたまま表示されています。

こんにちは、この問題が発生して申し訳ありません。最新の状況については、Question Answer Plugin に投稿してください。@mbcahyono または私がすぐに対応いたします。これは一般的な Discourse のサポートに関する質問ではありません。