스레드 내 답변이 순서대로 표시되지 않음

최근 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 작업을 수동으로 재현해 보려다 다음을 실행했습니다:

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 작업에는 post_number와 new_post_number를 비교하는 추가적인 where 조건이 있으며, sort_order를 비교하지 않습니다.

이제 다음과 같은 쿼리를 데이터베이스에서 수동으로 실행했습니다:

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 컬럼을 유지할지조차 확신이 서지 않습니다. 일종의 함정(footgun)처럼 보이기 때문입니다.

여기에 플러그인이 관련되어 있나요?

나도 그 이유를 모르겠어요. 코드를 살펴봐도 그럴 만한 원인을 찾지 못했습니다. 정렬 순서를 무언가 수정하는 것 같지만, 그게 뭔지는 보이지 않네요.

업그레이드를 실행했을 때 순서가 어긋난 줄 알았어요. 순서가 어긋난 메시지들은 대체로 훨씬 오래된 것이었고, 이전에는 예상된 위치에 있었거든요. 위에서 언급한 SQL을 실행했을 때는 모든 것이 정상으로 보였는데, 지난주에는 완전히 새로 작성된 게시물 두 개도 순서 없이 나타났습니다. 영향을 받는 게시물들은 항상 다른 게시물에 대한 답글인 것 같아요. 예를 들면:

다음 플러그인들을 설치하고 있습니다:

질문-답(Question-Answer) 플러그인이 정렬 순서를 수정하는 것 같지만, 그건 질문 주제에만 영향을 주어야 하고 일반 주제에는 영향을 주지 않아야 합니다.

저도 같은 문제를 겪고 있습니다. 긴 주제 때문에 게시글을 이동할 때 이전에 502 오류가 발생했던 적이 있는데, 이것이 관련이 있는지 확실하지 않습니다. 또한 질문-답변 플러그인을 설치해 두었지만, 플러그인을 비활성화한 후에도 여전히 주제 하단에 게시글이 표시되고 있습니다.

아마도 이것은 실제로 지원되거나 공식적인 플러그인이 아닐 가능성이 높습니다. sort_order는 discourse 코어에서 일관성 없이 사용되고 있으며, 이 컬럼을 제거하는 것을 고려하고 있습니다.

비공식 플러그인의 버그로 판단되므로 이 문제를 #support로 이동합니다.

@angus 이 이슈를 확인해 주시겠어요? 이 플러그인을 설치한 후 사이트 전체에서 댓글이 순서대로 표시되지 않았습니다. 플러그인을 제거했는데도 여전히 댓글이 순서대로 표시되지 않아요.

단일 게시글에서 다음 명령어가 순서가 바뀐 답변을 올바르게 정렬하는지 확인하기 위해 테스트를 실행했습니다 (Q&A 플러그인을 제거한 후).

rake posts:reorder_posts[1896]

불행히도 게시글은 여전히 순서대로 표시되지 않습니다.

안녕하세요, 해당 문제를 경험하신 점 죄송합니다. 관련 업데이트는 Question Answer Plugin 에 게시해 주세요. @mbcahyono 또는 제가 곧 답변드리겠습니다. 이는 일반적인 Discourse 지원 질문이 아닙니다.