Discourse インスタンス間でトピックを移動する

アップロード移行の問題を解決したいと思い続けていましたが、ついにLLMの助けを借りて実現することができました。興味のある方のために、私のメモを共有します!Jayさんの上記の投稿には、着手するために必要な特別なヒントが含まれており、感謝しています。

私の最初の試みは、Jayさんが予測した通り、まさにその通りに機能しました。移行元のサイト上の画像へのURLのリストを作成し、それを新しいサイトの投稿に貼り付けると、それらがダウンロードされます。これには、Download remote images to local(リモート画像をローカルにダウンロード)が有効になっている必要があります。

LLMがそのためのスクリプトを作成してくれたので、将来同じ問題に直面する人のためにここで共有します。

概要

これをRailsコンソールで実行してください:

topic = Topic.find(=TOPIC_ID=)
posts = Post.where(topic_id: topic.id)
urls = []

posts.each do |p|
  UploadReference.where(target: p).each do |ref|
    urls << "=SOURCE_URL=#{ref.upload.url}"
  end
end

puts urls.uniq.join("\n")
puts "\nTotal: #{urls.uniq.count} upload(s)"

:bulb: カテゴリ全体を移動する場合? 最初の2行を以下に置き換えてください:

topic_ids = Topic.where(category_id: =TOPIC_ID=).pluck(:id)
posts = Post.where(topic_id: topic_ids)

この場合、=TOPIC_ID= はカテゴリIDです。管理画面 → カテゴリのURLの末尾で見つけることができます。

しかし、私の場合、それだけでは十分ではありませんでした。なぜなら、PDFファイルは自動的にローカルにダウンロードされないからです。

そこで、LLMにアップロードを移行するためのPythonスクリプトを書いてもらいました。かなりうまく動作したので、こちらも共有したいと思います。試してみたい方やフィードバックがある方は、こちらのリポジトリをご覧ください:tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

「いいね!」 2