phpBBからのインポート

こんにちは。古いphpBB2フォーラムを新しいDiscourseにインポートしようとしています。

ドキュメントに記載されている通り、phpBB2からphpBB3への予備的なインポートを行いました。

アバターのインポート(インポートなし)とパスワードで問題が発生しました。確かにDiscourseはphpBB2とは異なる暗号化方法を使用しているため、最初のログイン時にパスワードがphpBB2方式で暗号化されているか確認し、phpBB2の暗号化(md5?)でパスワードが保存されたハッシュと一致するか確認し、その後Discourseの暗号化で書き直すコードを作成することを考えていました。

通常、PHPとMySQLを使えば、半時間ほどの作業ですが、Discourseではソースのどこを修正すればよいのかさえ分かりません。私の古いphpBB2は大幅に改造されていましたが(そのためphpBB3にアップデートしませんでした)、それは良い習慣ではなく、Discourseを台無しにしてアップデートの自動化を失いたくないので、どのように管理できるか質問しています。プラグインを開発すべきでしょうか?新しい「ベータ」バージョンでこの機能を利用する可能性はありますか?

よろしくお願いします。

パスワードをインポートするには、Migrated password hashes support プラグインが必要です。これにより、パスワードの問題が解決する可能性があります。

アバターの問題がデータの互換性の問題なのか、それともスクリプトの設定が正しくなかっただけなのかは、判断が難しいです。

「いいね!」 1

ヒントをありがとうございます。できるだけ早く試してみます。アバターについては、ガイドに記載されているすべての手順を再確認しましたが、うまくいきませんでした。しかし、インポートを繰り返す必要があるので、すべての手順を注意深く確認し、ご報告します。

「いいね!」 1

私はこのトピックのオーナーではありませんが、基本的に同じ旅をしているので参加したいと思います。

現在、import_phpbb3 を試しており、ユーザー作成の段階でいくつかの課題に直面しています。ユーザーのアバターも移行したいのですが、すべてのユーザーで機能しているわけではないようです。一部のユーザーでは、以下の問題が発生しています。

ユーザー myuser のアバターのアップロードに失敗しました: /shared/import/data/images/avatars/upload/phpbb_avatar_2.png
#<ActiveModel::Errors:0x00000055a4b3de78 @base=#<Upload id: nil, user_id: nil, original_filename: "avatar.png", filesize: 0, width: nil, height: nil, url: nil, created_at: nil, updated_at: nil, sha1: nil, origin: nil, retain_hours: nil, extension: nil, thumbnail_width: nil, thumbnail_height: nil, etag: nil, secure: false, access_control_post_id: nil, original_sha1: nil, animated: nil, verification_status: 1, security_last_changed_at: nil, security_last_changed_reason: nil>, @errors=[#<ActiveModel::Error attribute=base, type=申し訳ありませんが、アップロードしようとしている画像が大きすぎます(最大寸法は80メガピクセルです)。サイズを変更してもう一度お試しください。, options={}>]>

問題は PNG ファイル形式にあるようです。PNG ファイルもインポートできますか、それとも GIF/JPG である必要がありますか? oxipng はすでにインストールされています。

root@DietPi4-import:/var/www/discourse# which oxipng
/usr/local/bin/oxipng
root@DietPi4-import:/var/www/discourse#

パスワードプラグインについて。インポートコンテナの構築の一部として有効にしました。それとも、Discourse コンテナでも行う必要がありますか?これが機能したかどうかを確認する方法はありますか、それともユーザーが試す必要があることでしょうか?

よろしくお願いいたします。

migrate password プラグインは、移行が完了した後にのみフォーラムで有効にする必要があります。そうしないと、ユーザーのインポート中にエラーが発生する可能性があります。

機能していることを確認するには、有効にして、古いパスワードでログインしてみてください。

「いいね!」 3

フィードバックありがとうございます @Canapin
この場合、インポートコンテナでのインポートが完了した後、本番コンテナを再起動する前に再構築します。

ところで、管理者チームの誰かが私の最初の投稿を確認してもらえますか?投稿を調整しすぎたようで、スパムとマークされました :smiley:

PNGファイルのインポートが機能しない理由について、誰かアイデアはありますか?

より多くの情報があると役立ちます。phpBBのバージョンは?エラーメッセージはありますか?
「機能していない」とは具体的にどういうことか、詳しく教えていただけますか?

「いいね!」 1

既に上記で共有しました。インポートスクリプトはPNGファイルを正しく読み取れないようです。基本的にすべての値が nil になっています。

ああ、すみません、あなたがすでに問題を投稿しているのに気づきませんでした。それについてはお手伝いできません、すみません、適切なスキルがありません。

編集:(おそらく私の小さな「間違い」を防ぐために、あなた自身のメッセージに返信してくれたら、あなたの最初のメッセージを見ることができたでしょう)

移行中に時折、影響を受けたファイルが不明なファイル形式のために画像ビューアで開けなくなることがあります。長年かけてファイルが破損したのだろうといつも思っています。

インポートしようとしているPNGファイルは有効な画像ファイルであると確信していますか?もしそうであれば、例を共有していただけますか。また、Dockerコンテナ内でインポートしていますか、それとも開発環境でインポートしていますか?

「いいね!」 3

TL;DR; Linuxボックスへの転送中に画像が破損しました。

@gerhard PNGファイルは有効で正しいと100%確信していました。Windowsコンピューターで開くことができたからです。しかし、あなたのヒントが正しい方向へ導いてくれ、LinuxボックスでのPNGファイルの様子を確認しました。そして、あなたは完全に正しかったのです。すべてのPNGファイルが破損していました。根本原因は転送方法でした。SCP (WinSCP) を使用したところ、PNGファイルがテキストファイルとして転送され、破損につながりました。新しい試みでは、すべてを7zアーカイブとして転送し、Linuxボックスで直接展開しました。今回はインポートが正常に機能しました。

正しい方向へ導いてくれたサポートに大変感謝しています :+1:

これで、すべての投稿の99.9%のインポートが機能するようになりましたが、もう一つ質問があります。解決済みトピック のステータスも転送する方法はありますか?新しい本番フォーラムでは discourse-solved を使用する予定です。古いステータスを新しい世界に転送する方法についての質問です。

重ねて、サポートに大変感謝しています。

「いいね!」 2

phpBBに解決済みステータスがあるとは知りませんでした。これは拡張機能/MODですか?インポートスクリプトをカスタマイズしてインポートする必要があると思います。

phpbbデータベースを調べたところ、トピック/投稿が解決済みであることを示す情報を格納するフィールドがわかりました。あとは、Discourseデータベースにどのように、どこに格納するかを見つけるだけです。:roll_eyes:

「いいね!」 1

それに対応する他のインポートスクリプトを確認できます(「solved」で検索してみてください)。インポートインスタンスにプラグインがインストールされている必要があります。

「いいね!」 1

回答ありがとうございます。しかし、それは私のスキルを超えているようです。

元のphpbbデータベースでは、トピックを解決する投稿IDは次のように保存されています。

  • phpbb_topics.topic_solved

Discourseでは、情報は3つの異なるフィールドに保存されています(私の理解が正しければ)。

  • post_custom_fields.is_accepted_answer
  • topic_custom_fields.accepted_answer_post_id
  • topic_custom_fields.solved_auto_close_topic_timer_id

私の理解では、インポート中に何らかのマッピングが行われるようです。なぜなら、topic + postのIDは変更されるからです。

しかし、私の知識はそこで尽きます。

「いいね!」 1

であれば、それを修正・デバッグする方法を説明することは、ここで行えることの範囲を超える可能性が高いです。予算がある場合は、Marketplace に投稿するか、私に連絡してください。

それは「import_id」というカスタムフィールドに保存されており、コードで見ることができるルックアップに使用できる関数があります。topic_id_from_import_id() のようなものです。

「いいね!」 2

お申し出ありがとうございます。私たちは予算のない、ごく小規模なオープンソースプロジェクトです。当初、「トピック解決済み」機能がphpbbの非標準拡張機能であることに気づかず(フォーラムが作成されてから数年後に参加しました)、修正は簡単だと思っていました。しかし、個別のリクエストであり、調査に時間がかかることを理解しました。

再び、ほぼ完璧に動作するように協力してくれた皆さん、本当にありがとう。

ところで皆さん、phpbbはバージョン3.3.5から移行しました。サポートされていなくても、正常に動作していました。

「いいね!」 2

もしディスコースに関わるテーブルを特定できれば、他のインポーターから数行のコードをコピーできるかもしれません。

「いいね!」 1

なるほど。phpbbの投稿/トピックIDとDiscourseの投稿/トピックIDをマッピングしているのですね。

これは「accepted answers」をインポートするのに良い例になりそうです。discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub

しかし、私の理解が正しければ、最初のステップとして phpbb_topics.topic_solved の値を postgres に保存/インポートする必要がありますよね?

「いいね!」 1