phpBB3からWP/Discourseへの移行におけるユーザーデータ破損

時折、ユーザーデータを古いphpBB3ベースのサイトからインポートした直後に、WPからDiscourseへの同期中に一部のユーザーデータが別のユーザーのデータと破損するという問題が発生しています。頻繁に発生するわけではなく、オンデマンドで再現することもできないため、残念ながら開発チームはこれを問題としてほとんど無視しています。

最初のケースでは、テストユーザーアカウントの1つがデータのインポート直後に削除されましたが、そのテストユーザーのアバターが別のユーザーのプロファイルに割り当てられ、インポート完了時にそのユーザーとしてログインしていました。

2番目のケースでは、WPでテストユーザーを登録し、Discourseとの同期が発生したときに、このテストユーザーがDiscourseの既存ユーザーのユーザー名と一部のカスタムプロファイルおよびグループデータを取得しました。スクリーンショットを参照してください。

これらのケースの両方で、Discourseの重複ユーザーがテストユーザーのアカウント破損に関与していました。例:agmolnarとagmolnar1、tbm960cとtbm960c1

これらの重複ユーザーがいくつかあり、ほとんどがインポートされたphpBB3のデータファイル上の匿名ユーザーから来たと推測しています。

以前に同様のケースを見たことがある方や、問題の原因についてのヒントをお持ちの方はいらっしゃいますか?インポート前にphpBB3のインポートファイルから匿名ユーザーを削除するようにチームに依頼する価値はありますか?

提案があれば教えてください。

Ryanさん、こんにちは。

これらのファイルを確認して、何か役立つ情報が見つかるか見てみてください。

また:

そして:

匿名ユーザーをインポートしないようにこの部分を変更するか、奇妙な問題につながる手がかりを見つけられるかもしれません。

Coin-coinさん、ありがとうございます。インポート前にユーザーデータファイルから匿名ユーザーを削除した場合、匿名投稿は(現在もそうであるように)「システム」ユーザーに割り当てられると想定しています。インポートファイルからphpBBの匿名ユーザーを除外する理由で、私が知らないものはありますか?

これや、以下のような他のスレッドから推測しています。

私たちにとっての問題は、本質的にWPに存在しない重複ユーザーである匿名ユーザーに関連しているようです。WPのユーザーIDの構造を変更する新規インポートで、WPの新規作成されたテストユーザーを排除し、Discourseが外部WP IDでユーザーを最初に紐付けようとすることが原因のようです。

新規インポートを実行し、WPのテストアカウントを削除すると、WPの新たに作成されたユーザーが、存在しなくなった古いテストユーザーの古いIDで同期されるようです。

上記リンクの投稿#5で説明されているように、新規インポート中に外部IDではなくメールアドレスでユーザーを紐付けるように強制することで、古いユーザーと新しいユーザーの不要なマージの可能性を排除できるはずです。

これらはすべて理にかなっていますか?

ありがとうございます。

これには、一意のユーザーへの投稿の帰属が失われるという問題があります。そのため、すべての投稿が単一の system ユーザーから発信されているように見える会話をたどることが困難になります。参加者を互いに区別できなくなります。

その通りです。概念的には、そのままにしておき、管理ユーザープロファイルUIを使用して同じであるべきユーザーをマージするか、提案されているようにメールを外部IDとして送信するだけで、一致するメールアドレスを持つ既存のアカウントに新しいログインが接続されるようになります。

後者の方が明らかに抵抗が少ないパスです :+1:

@kiefferr 画像に含まれる詳細に気づき、共有する意図がない可能性があったため削除しました。必要であれば、画像を再アップロードしてください。:slight_smile: :+1:

「いいね!」 1

あなたは、ディスコースとphpbb3のコミュニティを同時に実行し、phpbb3から定期的にデータをインポートしていると言っているのですか?

現時点ではそのように思えますが、新しいWP/Discourseサイトの開発は長引いています。いいえ、Discourseはまだ開発中です。phpbb3を中心に構築されたカスタムサイトを置き換えています。

最初のインポートを実行し、次にカットオーバー前の最終インポートに備えて別のテストインポートを行うことにしました。ライブサイトでこれらのバグを追跡したくなかったので、そうしてよかったです。

「いいね!」 1

皆さん、こんにちは。追加のご質問があります。最終的なインポート/移行の直前に、外部IDではなくメールでユーザーを照合するように強制すること、およびSSOレコードを削除してクリーンに再伝播できるようにすることについて、上記の調査結果を開発チームと共有しました。

しかし、彼らは元のphpBB3のエクスポートデータに何か問題があったと考えているようです。具体的には、そのデータに重複/匿名ユーザーが存在すること、およびメールが関連付けられていないphpBBユーザーが存在することです。以下のすべては、phpBB3データのインポートに関してDiscourseが処理できるはずのことのように思えます。私が間違っていますか?特に、Discourseが匿名ユーザーに偽のユーザー名を割り当てる方法については、これは標準的な運用手順です。

現在のphpBB3インストールからよりクリーンなデータを取得する必要がある場合、おそらくそれが可能です。しかし、phpBBデータに手を加える必要も、加えるべきでもないように思えます。それが問題だったわけではありません。

Discourseの新規インストールを実行し、phpBBからのデータを正常にインポートしました。

調査結果は以下のとおりです。
「…_users」テーブルには合計3270件のレコードが含まれています。
Discourseからインポートされたユーザーをダウンロードしたところ、Discourseには3251人のユーザーがいることがわかりました。
分析中に、いくつかのユーザーのDiscourseのユーザー名に「1」が追加されていることがわかりましたが、これは実際にはphpBBデータのユーザー名に由来するものです。特定のユーザー「redacted_username1」のみがphpBBデータに存在しません。しかし、ユーザー「redacted_username」はphpBBデータに存在します。

Discourseのユーザー名「edacted_username1」に関連付けられたメールは「anonymous_52996ba94025464fdf3e5f3ae131bdf5@no-email.invalid」です。これは、ユーザー名「redacted_username」がすでに匿名ユーザーによって使用されており、その後「1」が追加されたことを示唆しています。

今後のインポートでこのような発生を防ぐために、匿名ユーザーやその他の不要なユーザーを除外した新しいデータを取得する必要があります。

phpBBとDiscourseのユーザー数には19人の差があります。phpBBデータ内には、アカウントに関連付けられたメールがないユーザーが53人います。

Discourseで「anonymous」ユーザーを検索すると、現在サスペンドされている匿名メールを持つ32人のユーザーが返されます。これらの匿名ユーザーに割り当てられたユーザー名は、phpBBデータには見つかりません。これは、Discourseが匿名ユーザーに偽のユーザー名を割り当てており、将来エラーを引き起こす可能性があることを示唆しています。

要約すると、メールのない19人のユーザーはインポートされず、32人のユーザーは偽のユーザー名を持つ匿名メールとして同期されました。

インポートできるクリーンなPHPBBデータを提供してください。

さらに、これについて何か考えがあればお知らせください。

それらのユーザーをデータベースから削除しない限り、スクリプトを変更してそれらのユーザーを無視するようにします。部分的なダンプを取得することは、おそらく容易に再現できません。

それらのユーザーを現在のサイトから削除できるのであれば、それは良い解決策のように思えます。私の好みは、ダンプを繰り返し転送するのではなく、ライブデータベースを直接読み取ることです。

「いいね!」 1