Déplacer des sujets d'une instance Discourse à une autre

J’ai envie de résoudre le problème de migration des téléversements depuis un bon moment, et grâce à l’aide d’un chatbot IA, j’y suis enfin parvenu. Je partage mes notes pour ceux qui suivent ! Le post ci-dessus de Jay contenait l’ingrédient secret nécessaire pour me lancer, merci pour ça.

Ma première tentative a fonctionné exactement comme Jay l’avait prédit. Si vous créez une liste d’URL vers les images du site d’origine et que vous la collez dans un post sur votre nouveau site, elles seront téléchargées. L’option Download remote images to local doit être activée pour que cela fonctionne.

Mon chatbot IA a créé un script à cet effet que je partage ici pour les futurs voyageurs.

Résumé

Exécutez ceci dans la console 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: Vous déplacez une catégorie entière ? Remplacez les deux premières lignes par :

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

Dans ce cas, =TOPIC_ID= est l’identifiant de votre catégorie, que l’on trouve à la fin de son URL dans Admin → Categories.

Cependant, cela n’a pas été suffisant pour moi, car j’ai aussi des PDF qui ne sont pas téléchargés localement automatiquement.

J’ai donc demandé à mon chatbot de m’écrire un script Python pour migrer les téléversements. Il fonctionne très bien, je suis donc heureux de le partager également. Si vous souhaitez l’essayer ou donner votre avis, voici le dépôt.

J’ai également demandé à mon chatbot de m’écrire un guide d’exécution plus complet pour déplacer des sujets ou des catégories, qui est disponible sur mon discourse.

2 « J'aime »