パーマリンクをトピックの最初の投稿ではなく、トピックURLを指すように修正

カスタム移行後、多くのパーマリンクがトピックURL自体ではなく、トピックの最初の投稿を指していました。

例:パーマリンクが以下を指している場合
https://forum.example.com/t/example-topic/123/1

代わりに以下を指すべきです:
https://forum.example.com/t/example-topic/123


確認

Discourseフォーラムが影響を受けているかどうかは、このSQLクエリのレコードを確認することでわかります。

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.