Wanderer
(Federico)
1
こんにちは。古いphpBB2フォーラムを新しいDiscourseにインポートしようとしています。
ドキュメントに記載されている通り、phpBB2からphpBB3への予備的なインポートを行いました。
アバターのインポート(インポートなし)とパスワードで問題が発生しました。確かにDiscourseはphpBB2とは異なる暗号化方法を使用しているため、最初のログイン時にパスワードがphpBB2方式で暗号化されているか確認し、phpBB2の暗号化(md5?)でパスワードが保存されたハッシュと一致するか確認し、その後Discourseの暗号化で書き直すコードを作成することを考えていました。
通常、PHPとMySQLを使えば、半時間ほどの作業ですが、Discourseではソースのどこを修正すればよいのかさえ分かりません。私の古いphpBB2は大幅に改造されていましたが(そのためphpBB3にアップデートしませんでした)、それは良い習慣ではなく、Discourseを台無しにしてアップデートの自動化を失いたくないので、どのように管理できるか質問しています。プラグインを開発すべきでしょうか?新しい「ベータ」バージョンでこの機能を利用する可能性はありますか?
よろしくお願いします。
pfaffman
(Jay Pfaffman)
2
パスワードをインポートするには、Migrated password hashes support プラグインが必要です。これにより、パスワードの問題が解決する可能性があります。
アバターの問題がデータの互換性の問題なのか、それともスクリプトの設定が正しくなかっただけなのかは、判断が難しいです。
「いいね!」 1
Wanderer
(Federico)
3
ヒントをありがとうございます。できるだけ早く試してみます。アバターについては、ガイドに記載されているすべての手順を再確認しましたが、うまくいきませんでした。しかし、インポートを繰り返す必要があるので、すべての手順を注意深く確認し、ご報告します。
「いいね!」 1
Joulinar
(Joulinar)
4
私はこのトピックのオーナーではありませんが、基本的に同じ旅をしているので参加したいと思います。
現在、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 コンテナでも行う必要がありますか?これが機能したかどうかを確認する方法はありますか、それともユーザーが試す必要があることでしょうか?
よろしくお願いいたします。
Canapin
(Coin-coin le Canapin)
5
migrate password プラグインは、移行が完了した後にのみフォーラムで有効にする必要があります。そうしないと、ユーザーのインポート中にエラーが発生する可能性があります。
機能していることを確認するには、有効にして、古いパスワードでログインしてみてください。
「いいね!」 3
Joulinar
(Joulinar)
6
フィードバックありがとうございます @Canapin
この場合、インポートコンテナでのインポートが完了した後、本番コンテナを再起動する前に再構築します。
ところで、管理者チームの誰かが私の最初の投稿を確認してもらえますか?投稿を調整しすぎたようで、スパムとマークされました 
Joulinar
(Joulinar)
7
PNGファイルのインポートが機能しない理由について、誰かアイデアはありますか?
Canapin
(Coin-coin le Canapin)
8
より多くの情報があると役立ちます。phpBBのバージョンは?エラーメッセージはありますか?
「機能していない」とは具体的にどういうことか、詳しく教えていただけますか?
「いいね!」 1
Joulinar
(Joulinar)
9
既に上記で共有しました。インポートスクリプトはPNGファイルを正しく読み取れないようです。基本的にすべての値が nil になっています。
Canapin
(Coin-coin le Canapin)
10
ああ、すみません、あなたがすでに問題を投稿しているのに気づきませんでした。それについてはお手伝いできません、すみません、適切なスキルがありません。
編集:(おそらく私の小さな「間違い」を防ぐために、あなた自身のメッセージに返信してくれたら、あなたの最初のメッセージを見ることができたでしょう)
gerhard
(Gerhard Schlager)
11
移行中に時折、影響を受けたファイルが不明なファイル形式のために画像ビューアで開けなくなることがあります。長年かけてファイルが破損したのだろうといつも思っています。
インポートしようとしているPNGファイルは有効な画像ファイルであると確信していますか?もしそうであれば、例を共有していただけますか。また、Dockerコンテナ内でインポートしていますか、それとも開発環境でインポートしていますか?
「いいね!」 3
Joulinar
(Joulinar)
12
TL;DR; Linuxボックスへの転送中に画像が破損しました。
@gerhard PNGファイルは有効で正しいと100%確信していました。Windowsコンピューターで開くことができたからです。しかし、あなたのヒントが正しい方向へ導いてくれ、LinuxボックスでのPNGファイルの様子を確認しました。そして、あなたは完全に正しかったのです。すべてのPNGファイルが破損していました。根本原因は転送方法でした。SCP (WinSCP) を使用したところ、PNGファイルがテキストファイルとして転送され、破損につながりました。新しい試みでは、すべてを7zアーカイブとして転送し、Linuxボックスで直接展開しました。今回はインポートが正常に機能しました。
正しい方向へ導いてくれたサポートに大変感謝しています 
これで、すべての投稿の99.9%のインポートが機能するようになりましたが、もう一つ質問があります。解決済みトピック のステータスも転送する方法はありますか?新しい本番フォーラムでは discourse-solved を使用する予定です。古いステータスを新しい世界に転送する方法についての質問です。
重ねて、サポートに大変感謝しています。
「いいね!」 2
gerhard
(Gerhard Schlager)
13
phpBBに解決済みステータスがあるとは知りませんでした。これは拡張機能/MODですか?インポートスクリプトをカスタマイズしてインポートする必要があると思います。
Joulinar
(Joulinar)
14
phpbbデータベースを調べたところ、トピック/投稿が解決済みであることを示す情報を格納するフィールドがわかりました。あとは、Discourseデータベースにどのように、どこに格納するかを見つけるだけです。
「いいね!」 1
pfaffman
(Jay Pfaffman)
15
それに対応する他のインポートスクリプトを確認できます(「solved」で検索してみてください)。インポートインスタンスにプラグインがインストールされている必要があります。
「いいね!」 1
Joulinar
(Joulinar)
16
回答ありがとうございます。しかし、それは私のスキルを超えているようです。
元の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
pfaffman
(Jay Pfaffman)
17
であれば、それを修正・デバッグする方法を説明することは、ここで行えることの範囲を超える可能性が高いです。予算がある場合は、Marketplace に投稿するか、私に連絡してください。
それは「import_id」というカスタムフィールドに保存されており、コードで見ることができるルックアップに使用できる関数があります。topic_id_from_import_id() のようなものです。
「いいね!」 2
Joulinar
(Joulinar)
18
お申し出ありがとうございます。私たちは予算のない、ごく小規模なオープンソースプロジェクトです。当初、「トピック解決済み」機能がphpbbの非標準拡張機能であることに気づかず(フォーラムが作成されてから数年後に参加しました)、修正は簡単だと思っていました。しかし、個別のリクエストであり、調査に時間がかかることを理解しました。
再び、ほぼ完璧に動作するように協力してくれた皆さん、本当にありがとう。
ところで皆さん、phpbbはバージョン3.3.5から移行しました。サポートされていなくても、正常に動作していました。
「いいね!」 2
pfaffman
(Jay Pfaffman)
19
もしディスコースに関わるテーブルを特定できれば、他のインポーターから数行のコードをコピーできるかもしれません。
「いいね!」 1
Joulinar
(Joulinar)
20
なるほど。phpbbの投稿/トピックIDとDiscourseの投稿/トピックIDをマッピングしているのですね。
これは「accepted answers」をインポートするのに良い例になりそうです。discourse/script/import_scripts/lithium.rb at 44f7a61c2c5b6f248a62ab7f987ebbd3091c71ef · discourse/discourse · GitHub
しかし、私の理解が正しければ、最初のステップとして phpbb_topics.topic_solved の値を postgres に保存/インポートする必要がありますよね?
「いいね!」 1