最近更新到 2.6.0.beta3 后,某些主题中的部分回复显示顺序错误。时间戳显示正确,但受影响的回复始终出现在主题底部。
我已尝试再次更新,并对受影响的主题运行 rake posts:reorder_posts,但均无效果。请问还有什么其他方法可以使其正确排序?还是这是 Discourse 的一个 bug?所有用户看到的帖子显示顺序都相同。
以下是其中一个主题的示例,这是该主题的底部:
最近更新到 2.6.0.beta3 后,某些主题中的部分回复显示顺序错误。时间戳显示正确,但受影响的回复始终出现在主题底部。
我已尝试再次更新,并对受影响的主题运行 rake posts:reorder_posts,但均无效果。请问还有什么其他方法可以使其正确排序?还是这是 Discourse 的一个 bug?所有用户看到的帖子显示顺序都相同。
以下是其中一个主题的示例,这是该主题的底部:
你碰巧把最后两篇帖子移到那个主题里了吗?在这种情况下,这是预期的行为。
不,它们一直就在那个主题里,而且在升级之前,回复的顺序是符合预期的。
这不仅仅出现在一个主题中,似乎所有主题都有这种情况。有一两条回复本不该排在最后,却出现在了末尾。
我遇到了同样的问题。
不,我没有将帖子移入主题,但回复在主题中显示顺序错乱。
从 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 任务还包含一个额外的 where 条件,用于比较 post_number 和 new_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
执行后,帖子现在已按正确的顺序显示。
我仍然不明白你是怎么进入这种状态的,我们唯一会调整这个的地方是在你移动帖子时。
帖子创建器只是将 sort_order 设置为 post_number。
从长远来看,我甚至不确定是否还要保留 sort_order 字段,它似乎是个容易引发问题的设计。
这里涉及任何插件吗?
我也不太明白,在查看代码时也没找到任何原因。似乎有某种东西修改了排序顺序,但我看不出具体是什么。
起初我以为是在运行升级时消息顺序乱了,因为那些顺序错乱的帖子通常年代更久远,而且之前都出现在预期的位置。当我运行上面的 SQL 时,一切似乎正常,但就在几周前,又有几条全新的帖子也出现了顺序错乱的情况。我认为受影响的帖子总是对另一条帖子的回复。例如:
我们安装了以下插件:
我猜是 question-answer 插件修改了排序顺序,但这应该只影响问答主题,而不影响普通主题。
我遇到了同样的问题。之前我在移动帖子时曾出现过 502 错误,尤其是涉及长话题时,不确定这是否与此有关。我还安装了问答插件,但即使禁用了它,帖子仍然出现在话题底部。
很有可能,这并不是一个真正受支持或官方的插件。sort_order 在 Discourse 核心中仅被不一致地使用,我们正考虑移除该列。
我将此话题移至 Support,因为我认为这是非官方插件中的一个错误。
@angus 能帮忙看一下这个问题吗?我安装了这个插件后,整个网站的回复顺序都乱了。我刚把插件卸载了,但回复依然顺序错乱。
嘿,很抱歉您遇到了这个问题。请将任何更新发布在 https://meta.discourse.org/t/question-answer-plugin/56032。@mbcahyono 或我将尽快回复。这不是一个通用的 Discourse 支持问题。