修复固定链接,使其指向主题URL而不是主题的第一个帖子

在自定义迁移后,许多永久链接指向了主题的第一篇帖子,而不是主题 URL 本身。

例如,永久链接指向
https://forum.example.com/t/example-topic/123/1

而不是
https://forum.example.com/t/example-topic/123


检查

如果以下 SQL 查询有记录,则表示 Discourse 论坛受到影响:

SELECT permalinks.*,
       posts.id,
       posts.topic_id,
       posts.post_number
FROM permalinks
         LEFT JOIN posts
                   ON posts.id = permalinks.post_id
WHERE permalinks.post_id IS NOT NULL
  AND posts.post_number = 1
LIMIT 20;

快速修复

如果永久链接最初指向主题的第一篇帖子,此操作会将永久链接更改为直接指向主题。

UPDATE permalinks
SET topic_id = posts.topic_id,
    post_id  = NULL
FROM posts
WHERE permalinks.post_id = posts.id
  AND permalinks.post_id IS NOT NULL
  AND posts.post_number = 1;

这可能是一个在迁移脚本末尾运行的良好清理例程。

1 个赞

您是如何创建永久链接的?

例如,在 discourse/script/import_scripts/vanilla_mysql.rb at main · discourse/discourse · GitHub 这里,他们专门检查文章编号,如果文章编号是 1,那么文章编号就不会被传递(保持为 NULL),因此永久链接不应该指向第一篇文章。

2 个赞

我采用了一种基于 SQL 的方法来处理永久链接,该方法基于与以下代码类似的代码:

… 但缺少 AND post_number <> 1——所以这就是罪魁祸首。

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.