Sposta i topic da un'istanza Discourse a un'altra

Volevo risolvere il problema della migrazione dei caricamenti da tempo immemore, e ora, grazie all’aiuto dei modelli linguistici di grandi dimensioni (LLM), ci sono riuscito. Condivido i miei appunti per chi segue! Il post di Jay sopra conteneva l’ingrediente segreto necessario per iniziare, quindi grazie per questo.

Il mio primo tentativo ha funzionato esattamente come previsto da Jay. Se crei un elenco di URL delle immagini sul sito da cui stai migrando e lo incolli in un post sul tuo nuovo sito, verranno scaricate. Download remote images to local deve essere abilitato per far sì che ciò funzioni.

Il mio LLM ha creato uno script per questo, che condividerò qui per i futuri viaggiatori.

Riepilogo

Esegui questo nel 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: Stai spostando un’intera categoria invece? Sostituisci le prime due righe con:

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

In questo caso, =TOPIC_ID= è l’ID della tua categoria, che si trova alla fine del suo URL in Amministrazione → Categorie.

Tuttavia, per me questo non è stato sufficiente perché ho anche dei PDF che non vengono scaricati localmente in modo automatico.

Quindi ho fatto scrivere al mio LLM uno script in Python per migrare i caricamenti. Funziona piuttosto bene, quindi sono felice di condividerlo anche. Se vuoi provarlo o hai feedback, ecco il repository: tobias/discourse-upload-migrator - Digitally Sovereign Forgejo: Digitally Sovereign, for the win!

2 Mi Piace