Ho importato con successo il mio forum vBulletin 5 in Discourse. Sebbene lo script di importazione generale funzioni correttamente, riscontro errori durante l’importazione degli allegati. Gli allegati sono archiviati nel mio database e includono le seguenti estensioni: java, html, jpg, png, txt, rtf, zip, js e xml.
Dopo aver eseguito il debug dell’azione import_attachment, ho scoperto che solo gli allegati con estensione java vengono importati correttamente. Lo script fallisce per gli allegati con altre estensioni.
Qualcun altro nella community ha riscontrato problemi durante l’importazione di allegati con queste estensioni di file? Qualcuno ha delle intuizioni sul motivo per cui lo script potrebbe fallire con questi particolari tipi di file?
Ecco una breve panoramica del problema:
I primi tre file nel mio database hanno l’estensione java e vengono importati senza problemi.
Lo script fallisce quando incontra un file con estensione jpg.
begin
upl_obj = create_upload(post.user.id, filename, real_filename)
if upl_obj&.persisted?
html = html_for_upload(upl_obj, real_filename)
if !post.raw[html]
post.raw += "\n\n#{html}\n\n"
post.save!
UploadReference.ensure_exist!(upload_ids: [upl_obj.id], target: post)
end
else
puts "Impossibile creare l'upload per #{filename}: #{upl_obj.errors.full_messages.join(", ")}"
next
end
rescue => e
puts "Errore durante l'elaborazione del file #{filename}: #{e.message}"
next
end
La mia ipotesi, che potrebbe essere sbagliata, è che un problema con la codifica dei newline renda i dati nei file binari errati perché un carattere di newline viene codificato come dati. Se gli unici file che funzionano sono in ascii, è una buona scommessa.
Quindi non è un problema di Discourse, ma un problema di mysql.
Quasi: non la codifica dei newline, ma trattati come testo e quindi corrotti.
EF BF BD è la sequenza di byte UTF-8 per ‘CARATTERE DI SOSTITUZIONE’ (U+FFFD). Questo è indicativo di un file trattato come testo anziché binario.
Un’immagine JPEG inizia con ff d8 ff e0 xx xx 4a 46 49 46 00
Puoi vedere che i primi quattro byte sono stati ciascuno sostituiti con EF BF BD.
Quindi le tue immagini sono effettivamente corrotte. Questo non è un problema con l’importer, è un problema con il database, come ha già detto @pfaffman. Se hai copiato questo database da un altro server, potresti voler verificare se questo è già un problema nel database originale. Questo potrebbe anche accadere solo con le immagini più vecchie (se è successo molto tempo fa). Rimuovi semplicemente l’exitline e vedi cosa succede.
@RGJ Grazie per l’aiuto. Ho provato a importare un nuovo database con le immagini corrette e, sebbene sia stato importato, non tutti gli allegati sono stati completamente importati. Sto riscontrando errori come questo:
Se ricordo bene, tutti i tag [ATTACH] vengono rimossi dai post poiché sono superflui. Probabilmente non funziona qui perché non si aspetta dati JSON al suo interno. Si tratterebbe di cercare il punto in cui vengono rimossi e modificare quel codice per tenere conto dei dati JSON all’interno del tag.
Prima di importare gli allegati, noto che i post con immagini contengono tag [ATTACH]. Dopo l’importazione, alcuni di questi tag sono correttamente compilati mentre altri rimangono vuoti. Perché succede?
Nessuna di quelle immagini viene visualizzata, vero?
Penso che alcuni allegati vBulletin li aggiungano al database e alcuni includano il bbcode in quel modo. Penso di aver modificato l’importazione per gestirli in precedenza.
Oh, non avevo notato il json prima. Ti aspetti che questi file json siano allegati incorporati nei post? Come sono fatti quei post in vBulletin?
Credo che gli altri errori siano dovuti al fatto che quei post non sono stati importati per qualche motivo (come l’argomento padre è stato eliminato o altrimenti non importato)
Non credo che questi siano file json, sono metadati json.
Sembra che vBulletin abbia cambiato la codifica delle posizioni degli allegati da
[attach]123[/attach]
a
[attach=json]{"data-attachmentid":123}[/attach]
e l’importatore non è in grado di gestirlo. Dovrebbe comunque allegare gli allegati, questi tag servono solo per posizionarli all’interno del post. Ma la cancellazione del tag avviene solo quando contengono un ID numerico.
Molti altri errori nello screenshot sopra sono indipendenti da questo problema.
Pensavo di aver visto che a volte il database li collegava al post e a volte il bbcode lo faceva, e immagino che a volte lo facciano entrambi? E a volte risiedono nel database e a volte sono file esterni (ma potrei ricordare qualche altro sistema su questo).