Migrare un forum SMF2 a Discourse

Ecco un aggiornamento: alla fine sono riuscito a farlo funzionare. Alcune delle lezioni apprese potrebbero aiutare altri, da qui la dettagliata spiegazione qui sotto. L’insidia dei permessi Unix potrebbe valere la pena aggiungerla all’OP.

Permessi Unix sulla cartella degli allegati

L’importatore SMF2 funzionava bene ma c’era una piccola insidia relativa ai permessi Unix degli allegati. Quando si esegue lo script di importazione, questo viene eseguito come utente discourse, che non ha necessariamente sia i permessi di lettura che di scrittura sul mount del volume degli allegati.

Durante l’importazione sembra che l’importatore crei piccoli file temporanei nella stessa directory, quindi è necessario assicurarsi che l’utente corretto abbia sia i permessi di lettura che di scrittura. Ho fatto questo tramite chown ricorsivo della directory sull’host all’utente discourse, ma ci sono altri modi, tra cui l’impostazione di permessi molto aperti o l’uso di Access Control Lists.

Il debug degli upload falliti è difficile

Se l’importatore SMF2 fallisce su un upload per qualsiasi motivo, riporta il fallimento nello stesso modo, quindi può essere difficile capire perché un allegato/upload è fallito.

I motivi possono includere:

  • Allegati nella posizione sbagliata sul file system.
  • Permessi insufficienti sugli allegati (richiede rw).
  • Il mount del volume Docker non è configurato correttamente.
  • Il DB SMF2 segnala che dovrebbe esserci un allegato che non esiste più nella tua cartella allegati (nel nostro forum SMF2, che ha circa 20 anni, c’erano parecchi allegati ‘persi’ - non c’è molto che tu possa fare per questi…)
  • L’oggetto di upload non viene salvato correttamente nel DB di Discourse o su disco in /shared/standalone/uploads
  • Il markdown per il link di upload non viene creato.

Ho eseguito il debug testando ogni passaggio del processo di allegato end-to-end e aggiungendo un gran numero di istruzioni puts di debug aggiuntive nel codice smf2.rb, per capire quale parte del processo di creazione dell’upload non funzionava. Nel mio caso ci sono stati numerosi piccoli problemi che alla fine sono stati risolti uno per uno.

Non essere pigro Marcus

E alla fine sono diventato pigro e non stavo completamente azzerando il DB, quindi ho avuto il problema che tutto stava avendo successo - ma l’importatore non sovrascrive un Topic o un Post già importato. Quindi il Markdown che fa riferimento all’upload, che dovrebbe apparire così:

---

![file-name.jpg|357x268](upload://oK9TCvNVoojGyr357Amh19Cz.jpeg)

non veniva inserito nei post.

Testare che funzioni

Il modo in cui ho trovato per testare che tutto questo funzionasse end-to-end è stato eseguire

Post.where("raw LIKE ?", "%upload://%").count

nella console Rails. Restituirebbe il conteggio dei Post che hanno effettivamente un link di upload corretto al loro interno e questo numero aumenta gradualmente durante il processo di importazione.

2 Mi Piace

Mi scuso per la risposta tardiva.
Se accedi alla cronologia del primo post e torni indietro per leggere le vecchie versioni, vedrai che il passaggio 4 è stato modificato e ridotto nella revisione 10. Le modifiche che ho apportato sono state eliminate, forse perché ora sono state corrette nello script di migrazione ruby. Non sono sicuro, e forse la copia di smf2.rb è ora completamente ridondante.

3 Mi Piace