Mover tópicos de uma instância do Discourse para outra

Eu queria resolver o problema de migração de uploads há muito tempo, e agora, com a ajuda de LLMs, consegui. Compartilhando minhas anotações para quem acompanha! O post acima de Jay continha o ingrediente secreto necessário para eu começar, então obrigado por isso.

Minha primeira tentativa funcionou exatamente como Jay previu. Se você criar uma lista de URLs das imagens no site de origem e colar isso em um post no seu novo site, elas serão baixadas. A opção Download remote images to local (Baixar imagens remotas para local) precisa estar habilitada para que isso funcione.

Meu LLM criou um script para isso, que compartilharei aqui para futuros viajantes.

Resumo

Execute isso no console do 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: Migrando uma categoria inteira? Substitua as duas primeiras linhas por:

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

Neste caso, =TOPIC_ID= é o ID da sua categoria, encontrado no final da URL em Admin → Categories.

No entanto, para mim, isso não foi suficiente, pois também tenho PDFs que não são baixados para o local automaticamente.

Então, pedi ao meu LLM para escrever um script em Python para migrar os uploads. Ele funciona muito bem, então estou feliz em compartilhá-lo também. Se você quiser tentar ou tiver feedback, aqui está o repositório: tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

2 curtidas