vBulletin 5 database の移行 - attachment extension に関する attachment のインポートエラー

Discourse に vBulletin 5 フォーラムのインポートが正常に完了しました。全体的なインポート スクリプトは問題なく動作しますが、添付ファイルのインポート中にエラーが発生しています。添付ファイルはデータベースに保存されており、以下の拡張子が含まれています: java, html, jpg, png, txt, rtf, zip, js, xml

import_attachment アクションをデバッグしたところ、java 拡張子の添付ファイルのみが正しくインポートされていることがわかりました。他の拡張子の添付ファイルではスクリプトが失敗します。

コミュニティでこれらのファイル拡張子の添付ファイルのインポートに関する問題に直面した人はいますか? スクリプトがこれらの特定のファイル タイプで失敗する理由についての洞察はありますか?

問題の概要は次のとおりです。

  • データベース内の最初の 3 つのファイルは java 拡張子を持ち、問題なくインポートされます。
  • スクリプトは、jpg 拡張子のファイルに遭遇すると失敗します。

@pfaffman 何かアドバイスや解決策があれば、大いに感謝いたします!

何が起こっているかを確認するために、デバッグ用の put ステートメントをいくつか追加する必要があります。

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 "Failed to create upload for #{filename}: #{upl_obj.errors.full_messages.join(", ")}"
          next
        end
      rescue => e
        puts "Error processing file #{filename}: #{e.message}"
        next
      end

そして、これらのエラーが発生しました。

これらのエラーは、拡張子がjpg、jpeg、png、PNG、gifの場合に発生します。

これらのエラーについて何かアイデアはありますか? @pfaffman

正常に動作したファイルはASCIIのみでした。エンコーディングエラーではないかと推測します。

データベース内のファイルの問題か、インポートスクリプトのエンコーディングの問題でしょうか? @pfaffman


他のファイルがエンコードされている場合、なぜjpg、pngなどの拡張子ではないのですか?

私の推測ですが、間違っているかもしれませんが、改行コードのエンコーディングの問題で、バイナリファイル内のデータが間違っている可能性があります。改行文字がデータとしてエンコードされているからです。ASCIIファイルのみが機能する場合、それは良い推測です。

したがって、これはDiscourseの問題ではなく、mysqlの問題です。

「いいね!」 1

ほぼ違います。改行コードのエンコーディングではなく、テキストとして扱われたため破損しています。

EF BF BD は「置換文字」(U+FFFD)のUTF-8バイトシーケンスです。これは、ファイルがバイナリではなくテキストとして扱われていることを示しています。

JPEG画像は ff d8 ff e0 xx xx 4a 46 49 46 00 で始まります。

最初の4バイトがそれぞれ EF BF BD に置き換えられていることがわかります。

したがって、画像は確かに破損しています。これはインポーターの問題ではなく、@pfaffman がすでに述べたように、データベースの問題です。このデータベースを別のサーバーからコピーした場合、元のデータベースですでにこの問題が発生しているかどうかを確認したい場合があります。これは最も古い画像でのみ発生している可能性もあります(これはかなり前に発生した場合)。単に exitを削除して、何が起こるか確認してください。

「いいね!」 1

@RGJ ご協力ありがとうございます。正しい画像で新しいデータベースをインポートしてみましたが、インポートはできましたが、すべての添付ファイルが完全にインポートされたわけではありません。以下のようなエラーが発生しています。

これが起こる理由について何かお考えはありますか? @RGJ @pfaffman

投稿がこのように表示されており、多くの事例があります。

インポーターがそれらを処理できるとは思えません。

記憶が正しければ、[ATTACH] タグはすべて不要なため、投稿から削除されます。これは、JSON データがタグ内に含まれていることを想定していないため、おそらくここでは機能しません。削除されている場所を調べて、JSON データをタグ内に含めるようにそのコードを変更する必要があります。

添付ファイルをインポートする前に、画像を含む投稿に[ATTACH]タグが含まれていることに気づきました。インポート後、これらのタグの一部は正しく入力されていますが、他のタグは空のままです。なぜですか?

言ったように、それらのタグは不要ですが、タグ削除ロジックはJSONコードを想定していないため、正しく削除されていません。

これらの画像はどれも表示されていませんか?

vBulletin の中には、画像をデータベースに追加するものと、上記のような bbcode を含めるものがあると思います。以前、それらを処理するようにインポートを修正したことがあると思います。

これらは表示されていません。
12.5k のうち 1k の添付ファイルでエラーが発生しました。
それらをアップロードするにはどうすればよいですか?

JSONを事前に確認していませんでした。これらのJSONファイルを投稿に埋め込まれた添付ファイルとして想定していますか?vBulletinでは、それらの投稿はどのようになりますか?

他のエラーは、それらの投稿が何らかの理由でインポートされなかったため(親トピックが削除されたか、インポートされなかったなど)だと考えられます。

これらはJSONファイルではなく、JSONメタデータだと思います。
vBulletinが添付ファイルの場所のエンコーディングを次のように変更したようです。

[attach]123[/attach]

から

[attach=json]{\"data-attachmentid\":123}[/attach]

そしてインポーターはそれを処理できません。添付ファイルはとにかく添付されるはずです。これらのタグは投稿内での配置のためだけのものです。しかし、タグの削除は数値IDが含まれている場合にのみ発生します。

上記のスクリーンショットにある他の多くのエラーは、この問題とは無関係です。

「いいね!」 1

データベースが投稿にリンクし、BBCodeがリンクし、時には両方がリンクすることもあると思っていましたか?そして、時にはデータベースにあり、時には外部ファイルにある(しかし、これは他のシステムのことかもしれません)ということですか?

はい、その通りです。しかし、私の知る限り、vBulletin 5 では常にデータベース経由です。

「いいね!」 1