Migrazione del database di vBulletin 5 - Errori di importazione degli allegati riguardo alle estensioni degli allegati

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.

@pfaffman Qualsiasi consiglio o soluzione sarebbe molto apprezzato!

Dovrai aggiungere alcune istruzioni di debug per vedere cosa sta succedendo.

Ho aggiunto un’istruzione di debug su upl_obj

     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

e ho visto questi errori

questi errori sono sulle estensioni jpg, jpeg, png, PNG, gif

Qualche idea su questi errori? @pfaffman

Gli unici file che hanno funzionato sono ascii. La mia ipotesi è un errore di codifica.

C’è un problema con i file nel database o un problema di codifica dello script di importazione? @pfaffman


Vedi questi file se altri sono codificati, allora perché queste estensioni come jpg, png ecc. non lo sono?

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.

1 Mi Piace

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’exit line e vedi cosa succede.

1 Mi Piace

@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:

Hai qualche idea sul perché stia succedendo? @RGJ @pfaffman

I post stanno apparendo in questo modo, e ci sono molte istanze:

Non credo che l’importatore possa gestirli.

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?

Come ho detto, quei tag sono superflui, ma la logica di rimozione dei tag non si aspetta quel codice JSON, quindi non li sta rimuovendo correttamente.

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.

Sì, questi non vengono visualizzati.
Ho riscontrato errori su 1k allegati su 12,5k.
Come posso caricarli?

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.

1 Mi Piace

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).

Sì, è abbastanza corretto. Ma per quanto ne so, in vBulletin 5 avviene sempre tramite il database.

1 Mi Piace