rrit
(Ayke)
2022 年 2 月 15 日午後 4:38
1
カスタム移行後、多くのパーマリンクがトピック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
cocococosti
(Constanza Abarca)
2022 年 2 月 15 日午後 6:06
2
パーマリンクはどのように作成しましたか?
例えば、discourse/script/import_scripts/vanilla_mysql.rb at main · discourse/discourse · GitHub では、投稿番号を具体的にチェックしており、それが1の場合は投稿番号が(NULLのまま)渡されないため、パーマリンクは最初の投稿を指すべきではありません。
「いいね!」 2
rrit
(Ayke)
2022 年 2 月 15 日午後 8:47
3
パーマリンクに対して、以下のようなコードに似たSQLベースのアプローチを行いました。
WHERE pm.id IS NULL AND f.name = 'import_unique_id'
SQL
r = DB.exec sql
puts "#{r} permalinks to topics added!"
sql = <<-SQL
INSERT INTO permalinks (url, post_id, created_at, updated_at)
SELECT '/p/' || value, p.id, current_timestamp, current_timestamp
FROM post_custom_fields f
JOIN posts p on f.post_id = p.id AND post_number <> 1
LEFT JOIN permalinks pm ON url = '/p/' || value
WHERE pm.id IS NULL AND f.name = 'import_unique_id'
SQL
r = DB.exec sql
puts "#{r} permalinks to posts added!"
end
def find_upload(user_id, attachment_id, real_filename)
…ただし、AND post_number <> 1 が欠落していたため、それが原因でした。
「いいね!」 1
system
(system)
クローズされました:
2022 年 3 月 17 日午後 8:47
4
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.