오래전부터 업로드 마이그레이션 문제를 해결하고 싶었는데, 이제 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)"
전체 카테고리를 이동해야 하는 경우? 처음 두 줄을 다음과 같이 교체하세요:
topic_ids = Topic.where(category_id: =TOPIC_ID=).pluck(:id) posts = Post.where(topic_id: topic_ids)이 경우 =TOPIC_ID=는 Admin → Categories URL의 끝에 있는 카테고리 ID입니다.
하지만 제 경우엔 이것만으론 충분하지 않았습니다. 자동으로 로컬에 다운로드되지 않는 PDF 파일들도 있었기 때문입니다.
그래서 LLM에게 업로드를 마이그레이션하는 Python 스크립트를 작성해 달라고 했습니다. 꽤 잘 작동해서 이 또한 공유하고자 합니다. 직접 사용해 보고 싶거나 피드백이 있다면, 레포지토리는 여기 있습니다: tobias/discourse-upload-migrator: Migrates uploads (images, PDFs, and other attachments) from one Discourse instance to another via the Discourse API. - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!
또한 LLM에게 주제나 카테고리를 이동하는 더 완전한 런북(runbook)도 작성해 달라고 했는데, 제 discourse에 올라가 있습니다: https://digitallysovereign.org/t/move-topics-or-categories-between-discourse-instances/742?u=tobias