Il nostro team ha operato come ospite su un’altra istanza di Discourse. Stiamo configurando la nostra istanza di Discourse e vorremmo migrare le nostre categorie dall’istanza esistente alla nuova istanza. Non abbiamo accesso amministrativo al server esistente, ma gli amministratori sono disposti a fare un esportazione di categorie per noi. Tuttavia, questa esportazione non contiene allegati o immagini. Abbiamo accesso API all’istanza esistente, ma solo alle nostre categorie. Abbiamo accesso amministrativo alla nuova istanza.
È possibile migrare allegati e immagini utilizzando solo l’API per l’istanza esistente?
Stavo guardando il JSON esportato e i nomi dei file degli allegati sono stringhe casuali diverse da quelle servite nel browser, il che rende l’ingegnerizzazione inversa dell’API per scaricare allegati e immagini non così semplice. Anche se potessimo scaricare tutti gli allegati dall’istanza esistente, non sono sicuro di come aggiungerli alla nuova istanza. Questo post mi fa credere che sia facile come inserirli in quella posizione con il requisito che i nomi dei file siano identici a quelli nel JSON esportato, ma ciò non sembra funzionare.
Non sembra esserci alcuna relazione nei nomi dei file. Date queste informazioni, posso usare l’API per recuperare gli allegati che non sono inclusi nell’esportazione. Ma non sono sicuro di quale nome dare al file e dove posizionarlo sul nuovo server.
Una volta risolto, sarebbe possibile far apparire gli allegati nelle pagine dei topic renderizzati quando vengono caricati come prima della migrazione?
Tornando con una soluzione che funziona con un’istanza di test che non ho provato in produzione.
Questo è per il mio futuro io, da passare al team che farà effettivamente la migrazione o a chiunque altro abbia bisogno di qualcosa di simile.
Gli allegati dovrebbero avere il nome completo, che può essere convertito dalla forma breve nel json tramite lo script python in Converting short upload URLs to full URLs
Gli allegati dovrebbero essere inseriti in discourse/public/uploads/tombstone/default/original/
Quindi esegui uploads:recover_from_tombstone mentre sei in /var/discourse/