帖子回复顺序混乱

最近更新到 2.6.0.beta3 后,某些主题中的部分回复显示顺序错误。时间戳显示正确,但受影响的回复始终出现在主题底部。

我已尝试再次更新,并对受影响的主题运行 rake posts:reorder_posts,但均无效果。请问还有什么其他方法可以使其正确排序?还是这是 Discourse 的一个 bug?所有用户看到的帖子显示顺序都相同。

以下是其中一个主题的示例,这是该主题的底部:

1 个赞

你碰巧把最后两篇帖子移到那个主题里了吗?在这种情况下,这是预期的行为。

2 个赞

不,它们一直就在那个主题里,而且在升级之前,回复的顺序是符合预期的。

这不仅仅出现在一个主题中,似乎所有主题都有这种情况。有一两条回复本不该排在最后,却出现在了末尾。

2 个赞

我遇到了同样的问题。

不,我没有将帖子移入主题,但回复在主题中显示顺序错乱。

posts:reorder_posts 运行查询显示,若干帖子的 sort_order 存在异常,看起来 rake 任务应该更新它们,但实际上并未更新。


执行以下 SQL 后:

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 任务还包含一个额外的 where 条件,用于比较 post_numbernew_post_number,而不是 sort_order

现在我已经在数据库中手动执行了以下 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

执行后,帖子现在已按正确的顺序显示。

2 个赞

我仍然不明白你是怎么进入这种状态的,我们唯一会调整这个的地方是在你移动帖子时。

帖子创建器只是将 sort_order 设置为 post_number。

从长远来看,我甚至不确定是否还要保留 sort_order 字段,它似乎是个容易引发问题的设计。

这里涉及任何插件吗?

我也不太明白,在查看代码时也没找到任何原因。似乎有某种东西修改了排序顺序,但我看不出具体是什么。

起初我以为是在运行升级时消息顺序乱了,因为那些顺序错乱的帖子通常年代更久远,而且之前都出现在预期的位置。当我运行上面的 SQL 时,一切似乎正常,但就在几周前,又有几条全新的帖子也出现了顺序错乱的情况。我认为受影响的帖子总是对另一条帖子的回复。例如:

我们安装了以下插件:

我猜是 question-answer 插件修改了排序顺序,但这应该只影响问答主题,而不影响普通主题。

我遇到了同样的问题。之前我在移动帖子时曾出现过 502 错误,尤其是涉及长话题时,不确定这是否与此有关。我还安装了问答插件,但即使禁用了它,帖子仍然出现在话题底部。

很有可能,这并不是一个真正受支持或官方的插件。sort_order 在 Discourse 核心中仅被不一致地使用,我们正考虑移除该列。

我将此话题移至 Support,因为我认为这是非官方插件中的一个错误。

@angus 能帮忙看一下这个问题吗?我安装了这个插件后,整个网站的回复顺序都乱了。我刚把插件卸载了,但回复依然顺序错乱。

我已在单篇帖子中运行测试,以验证以下命令是否能在移除问答插件后修正该帖子中回复顺序错乱的问题:

rake posts:reorder_posts[1896]

遗憾的是,帖子仍显示顺序错乱。

嘿,很抱歉您遇到了这个问题。请将任何更新发布在 https://meta.discourse.org/t/question-answer-plugin/56032。@mbcahyono 或我将尽快回复。这不是一个通用的 Discourse 支持问题。

2 个赞