Migrate a phpBB3 forum to Discourse

それはすべてかなり典型的です。

あなたが提案する変更は、他​​のインポートを壊すことはないと思います。多くの場合、これらの変更のセットがあり、その後、インポートに固有の多くの他の変更があり、どちらがどちらであるかを特定して再度テストするのは多くの作業になるため、PRが作成されません。

完了したとのこと、おめでとうございます!

「いいね!」 3

Constanzaさん、ありがとうございます。とても参考になるリンクでした。:+1:


Jayさん、情報ありがとうございます。移行が完了したら、より良いphpBB3移行ツールを作成するのに役立つよう、後でPRを作成します。

現在のスクリプトでは、他の移行中に遭遇した [size=XXX] タグも無視されます。
現在の移行では、インポーターで簡単なスクリプトを作成し、XXX の値を使用してこれらのタグを \u003csmall\u003econtent\u003c/small\u003e および \u003cbig\u003econtent\u003c/big\u003e に置き換えました。これらは Discourse でサポートされているためです。
しかし、それは個人的な要望であり、(一般的に言えば)インポートスクリプトが [color] タグに対して既に行っているように、これらの [size タグを単純に削除する方がより適切な解決策かもしれません。

「いいね!」 4

フィードバックをいただいた @Canapin さん、ありがとうございます。PR は大歓迎です!

また、ちょっとした予告ですが、phpBB だけでなく、すべてのインポートをより良く、より速く、カスタマイズしやすくし、BBCode 変換の厄介な問題をなくすソリューションに取り組んでいます… :wink:

「いいね!」 4

投稿をインポートした際に、以下のようなエラーが多数発生しました(すべての投稿ではありません)。

   251491 / 251672 ( 99.9%)  [14140 items/min]  Exception while creating post 354629. Skipping.
undefined method `[]' for nil:NilClass
/var/www/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:66:in `block in map_first_post'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.1/lib/active_support/core_ext/object/try.rb:15:in `try'
/var/www/discourse/script/import_scripts/base.rb:576:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:523:in `block in create_posts'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.3/lib/patches/db/mysql2/alias_method.rb:8:in `each'
/var/www/discourse/script/import_scripts/base.rb:510:in `create_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:192:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:874:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:873:in `loop'
/var/www/discourse/script/import_scripts/base.rb:873:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:254:in `batches'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:188:in `import_posts'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:38:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
/var/www/discourse/script/import_scripts/phpbb3/importer.rb:22:in `perform'
script/import_scripts/phpbb3.rb:33:in `<module:PhpBB3>'
script/import_scripts/phpbb3.rb:14:in `<module:ImportScripts>'
script/import_scripts/phpbb3.rb:13:in `<main>'

しかし、原因を特定できませんでした。

何かヒントはありますか?

実際に投稿が欠落しているかどうかを確認するにはどうすればよいですか?「Exception while creating post 354629」に対応するデータ(投稿内容など)を出力する方法が見つかりません。

以前のインポートテストではこのエラーは発生しなかったと思いますが、単に気づかなかっただけかもしれません… この既知の問題に関連しているのでしょうか?

251490 / 251672 ( 99.9%)  [14140 items/min]  Parent post 337703 doesn't exist. Skipping 354628: vw-camper est malade !?

この特定の問題に関して、インポートスクリプトを2回実行しました。

「いいね!」 1

この機能を使用していない場合は、settings.yml ファイルで tag_mappings: {} を設定してください。

「いいね!」 3

愚かだと感じています!それについて考えていたのに、以前このエラーに遭遇したことがないと確信していたため、試しませんでした… :facepalm:

これで問題は解決しました。本当にありがとうございます。


現時点ではあまり多くを語れないと思いますが、どのように機能するのか、そしてこの新しいもので使用可能なインポートスクリプトがいつ利用可能になるのか、何か手がかりはありますか?
今年、別のphpBBを移行するかもしれないので、もう少し知っておくと非常に興味深いです。 :slight_smile:

「いいね!」 1

こんにちは。phpbb 3.2 から Discourse へのフォーラム(トピック 30,000 件 / 投稿 600,000 件)の移行をテストしていますが、「親投稿 xx が存在しません」というトピックがいくつかインポートされない以外は、ほぼすべて正常に動作しています。複数回実行しても解決せず、問題ではありません。

主な問題は、インポート/mysql/imported ファイルの sha256sum で検証した新しいデータで後続のインポートを実行しても、Discourse に新しい投稿がインポートされないことです。プロセスの早い段階で例外が発生していますが、関連があるかどうかはわかりません。

ID 6815 の投稿のマッピングに失敗しました

BIGINT UNSIGNED 値が範囲外です('(`phpbb_prod`.`o`.`poll_option_total` - (select count(distinct `phpbb_prod`.`v`.`vote_user_id`) from `phpbb_prod`.`phpbb3_poll_votes` `v` join `phpbb_prod`.`phpbb3_users` `u` join `phpbb_prod`.`phpbb3_topics` `t` where ((`phpbb_prod`.`u`.`user_id` = `phpbb_prod`.`v`.`vote_user_id`) and (`phpbb_prod`.`v`.`topic_id` = `phpbb_prod`.`t`.`topic_id`) and (`phpbb_prod`.`v`.`poll_option_id` = `phpbb_prod`.`o`.`poll_option_id`) and (`phpbb_prod`.`t`.`topic_id` = `phpbb_prod

これは、表示されている SQL から、投稿に埋め込まれた投票の問題でしょうか?

良い一日を!

「いいね!」 2

まだ開発中なので、あまり多くは言えません。計画は変更される可能性があります…しかし、「今年中」というのは良い予測です。:wink:

「いいね!」 2

範囲外のBIGINT UNSIGNED値です

この投票にはそんなに多くの匿名投票がありますか?

このSQLを調整する必要があります。

このようなものでしょうか? https://stackoverflow.com/a/11704174/451338
解決策が見つかったら、または修正のためのPRを作成したらお知らせください。感謝します。

「いいね!」 3

投票はフォーラムの最初からありますが、この時期は私が担当していなかったので、匿名ユーザーが投票に投稿/回答することを許可されていなかったと思います。

 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';

これで、すべての投票票を照会でき、そのうち2つについては、マイナスの「anonymous_votes」があります。実際、このフォーラムでは匿名投票が許可されていたようです。:slight_smile:

ヒントをくれた@gerhardさん、ありがとうございます。さらに深く調べてみます…

「いいね!」 4

phpBBフォーラムをDiscourseに移行しようとしています。問題は、phpBBがMySQLではなくPostgresを使用していることです。そのため、スクリプトをそれにも対応できるように適応させたいと考えています。

これを行う最善の方法について、何かヒントをいただけますでしょうか?理想的には、この作業から皆が恩恵を受けられるようにしたいので、単に動作するようにハッキングするのではなく、アップストリームで受け入れられるアプローチを使用したいと考えています。

私の理解では、主に適切なDBアダプターを使用してPostgreSQLスキーマ用のSQLステートメントを追加することが問題のようですが、Dockerコンテナのオーケストレーション全体を、設定で指定されたDBタイプによって必要とされるPostgreSQLインスタンスを適切に起動し、DBダンプをインポートしてステートメントを実行するために、どのように適応させる必要があるのかがわかりません。

「いいね!」 2

postgresql で実行される phpBB の一括インポート スクリプトがあります。それを見ましたか? discourse/script/bulk_import/phpbb_postgresql.rb at main · discourse/discourse · GitHub

しかし、最近は使用されていないと思うので、おそらく壊れており、Markdown の保存形式が変更されたため、現在の phpBB バージョンでは機能しない可能性があります。

:+1:

どちらのパスを選択するにしても、本当に望まない限り、ソリューションに過剰な手間をかけることはお勧めしません。現在のインポート スクリプトは、今年中に廃止される予定です…

「いいね!」 2

ありがとうございます、知りませんでした!そして、スクリプトが廃止される予定であるという注意喚起もありがとうございます。もしすぐに廃止されるのであれば、そのようなメジャーな機能をアップストリームする価値はないのでしょうか?それらの代替となるものは計画されていますか?

「いいね!」 1

はい、もちろん代替品があります。

「いいね!」 3

もう一つ気になる点なのですが、インポートしたユーザーがDiscourseから一切メールを受け取らないようにするには、disable_edit_notifications以外に何か設定する必要がありますか? 現在、インスタンスは公開されておらず、インポートの実験中で、十分な状態になるまで数回の試行が必要になる可能性があるため、メールが送信されないようにしたいです。

「いいね!」 1

disable_emails サイト設定を探しています…

「いいね!」 4

Discourseでは[b]テキスト[/b]はインラインでサポートされていますが、改行を含むブロックテキストでは解釈されません。

[b]例えば、投稿に次のようなテキストがあるとします…

空行の後に続けて、bbcodeを閉じると、テキストは太字に変換されません[/b]

[i]やその他のタグでも同様です。

インポートでクリーンな解決策が見つかりませんでした。何かアイデアはありますか? :man_shrugging:

「いいね!」 2

これは理想的な解決策ではありませんが、少なくともプランBまたはCのアイデアがあります。

インポート後、[b]<b>に、[/b]</b>に再マッピングできます。これは、<b>がここでブロックで機能するためです。

テスト

テスト

<b>テスト

テスト</b>

しかし、大規模なフォーラムでは時間がかかります :confused:

「いいね!」 3

良いアイデアですね!

私のフォーラムはまだインポートされていないので、インポーターで作業を続けることができます。

意味論的な「プロパティ」にもかかわらず、<strong><em> を使用する方がより理にかなっていませんか?

「いいね!」 2

それは素晴らしいニュースですね!

まず試してみるのに良いことだと思います。

「いいね!」 2