vBulletin 5インポートエラー(ウェブサイトフィールドに無効な文字)と添付ファイルに関する簡単な質問

こんにちは!

3 年前に phpBB から最初の古いフォーラムをインポートして以来、今回は 18 万人のメンバーと 160 万件のメッセージを持つ、より大規模なフォーラム(vBulletin5 使用)の管理者が、Discourse への移行を決心してくれたことを嬉しく思います。:tada:

インポートはユーザー番号 71712 まで正常に進みましたが、ウェブサイト欄に無効な文字が含まれていたことが原因で停止しました。

問題となったデータは以下の通りです:
:website=>"http://url-redacted.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí",

発生した 2 つのエラーメッセージは以下の通りです:

1: from /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:73:in `parse' /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:21:in `split': URI must be ascii only "http://url-redacted.com - \u00E6\u00E5\u00F1\u00F2\u00EA\u00EE\u00E5 \u00EF\u00EE\u00F0\u00ED\u00EE \u00F1\u00EC\u00EE\u00F2\u00F0\u00E5\u00F2\u00FC \u00EE\u00ED\u00EB\u00E0\u00E9\u00ED" (URI::InvalidURIError)

および:

1: from /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2394:in `defer_validation' /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2475:in `validate': Invalid character in host: 'url-redacted.com.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí' (Addressable::URI::InvalidURIError)

URL は「ASCII 文字のみでなければならない」とのことですが、エラーを発生させてスクリプトを停止させるのではなく、フィールドの内容を単に削除するか、サニタイズ(浄化)する対応はできないでしょうか?:thinking:
再度インポートを試みる前に、このユーザーをデータベースから削除してみます。

また、もう一つ質問があります。アバターはデータベースに保存されており、正常にインポートされました。

では、添付ファイルはどうなるのでしょうか? 私のケースでは、vBulletin のデフォルト設定通り、添付ファイルもデータベース内に保存されています。これらはインポートされるのでしょうか、それとも別フィールドとして保存しておく必要があるのでしょうか?

@Canapin さん、こんにちは

旧 vB3 フォーラムを移行した際、15 年分の投稿データに蓄積された奇妙な文字化けや異常な添付ファイルがデータベースを汚染しており、移行スクリプトで多くのエラーが発生しました。

私が行った対応はあまり優雅ではありませんが、私たちの環境では機能しました。

エラーが発生した際、移行スクリプトの該当箇所を直接編集し、問題の行を以下のようにラップしました。

begin
# 問題の Ruby 行
rescue
puts "ここに興味深いエラー情報"
end

約 100 万件の vB3 投稿を Discourse に移行した経験から、最も信頼できる相棒の一つはこれです。

begin
rescue
end

いくつかの不正な投稿を失いましたが、100 万件のうち数件を捨てることには問題ありませんでした。

参考になれば幸いです。

Railsのことはよくわからないので、websiteフィールドの内容を空文字列に置き換えました。そもそもスパムアカウントでしたし、すでに処理済みのユーザーのほぼ半数で発生している唯一のエラーです。

したがって、スクリプトコードで修正されなくても大きな問題ではありませんが、インポートをブロックしないようにしていただけると助かります:wink:

添付ファイルについては、とにかくメッセージのインポートを試みて、その間にこの情報が得られなければ、添付ファイルがインポートされるかどうか(あるいは何かエラーメッセージが出るかどうか)を確認します。

@Canapin さん、こんにちは

vB3 の添付ファイルを Discourse にインポートする際、私たちも Ruby の begin rescue end によるラッパーをいくつか記述する必要がありました。しかし最終的には、ほぼすべての添付ファイル、アバター、プロフィール画像を移行できました。

始めた頃は Ruby や Rails の経験がありませんでしたが、Discourse のおかげで今では Ruby や Rails の大ファンになり、毎日少しづつ Rails のコードを書いています。

興味があるなら、移行の過程で少し学ぶのも良いことだと思います。