Перенесите темы с одного экземпляра Discourse на другой

Я давно хотел решить проблему миграции загрузок, и теперь, благодаря помощи LLM, мне это удалось. Делюсь своими заметками для тех, кто следит за этой темой! В посте Джейа выше содержалось то самое «секретное снадобье», которое помогло мне начать, так что спасибо ему за это.

Моя первая попытка сработала ровно так, как предсказал Джей. Если вы создадите список 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: Переносите целую категорию? Замените первые две строки на:

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

В этом случае =TOPIC_ID= — это ID вашей категории, которое можно найти в конце её URL в разделе Admin → Categories.

Однако для меня этого оказалось недостаточно, так как у меня также есть PDF-файлы, которые не скачиваются локально автоматически.

Поэтому я попросил LLM написать для меня Python-скрипт для миграции загрузок. Он работает довольно хорошо, поэтому я с удовольствием поделюсь и им. Если вы хотите попробовать или дать обратную связь, вот репозиторий: tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

2 лайка