Ich wollte schon seit Ewigkeiten das Problem der Upload-Migration lösen und habe es dank LLM-Unterstützung nun endlich geschafft. Hier teile ich meine Notizen mit allen, die das mitverfolgen! Jays Beitrag oben enthielt genau das, was ich zum Einstieg brauchte – danke dafür!
Mein erster Versuch funktionierte genau so, wie Jay vorhergesagt hatte. Wenn man eine Liste der URLs der Bilder auf der Quell-Instanz erstellt und diese in einen Beitrag auf der neuen Instanz einfügt, werden sie heruntergeladen. Dafür muss die Option Download remote images to local aktiviert sein.
Mein LLM hat dafür ein Skript erstellt, das ich hier für zukünftige Reisende teile.
Zusammenfassung
Führe dies in der Rails-Konsole aus:
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)"
Möchtest du stattdessen eine ganze Kategorie verschieben? Ersetze die ersten beiden Zeilen durch:
topic_ids = Topic.where(category_id: =TOPIC_ID=).pluck(:id) posts = Post.where(topic_id: topic_ids)In diesem Fall ist =TOPIC_ID= deine Kategorie-ID, die am Ende ihrer URL unter Admin → Kategorien zu finden ist.
Für mich war das jedoch nicht ausreichend, da ich auch PDFs habe, die nicht automatisch lokal heruntergeladen werden.
Deshalb habe ich mein LLM gebeten, ein Python-Skript zum Migrieren der Uploads zu schreiben. Es funktioniert ziemlich gut, daher teile ich es gerne ebenfalls. Wenn du es ausprobieren möchtest oder Feedback hast, findest du das Repo hier: tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!
Außerdem hat mein LLM ein ausführlicheres Runbook zum Verschieben von Themen oder Kategorien erstellt, das auf meinem Discourse-Forum zu finden ist: https://digitallysovereign.org/t/move-topics-or-categories-between-discourse-instances/742?u=tobias