phpBB3フォーラムをDiscourseへ移行する

最初のテスト環境ではインポーターが正常に動作しましたが、今度は本番環境となるべき新しい環境に古いフォーラムを再インポート(または新規インポート)しようとしたところ、失敗しました。

以下のエラーが発生します:
/var/www/discourse/plugins/discourse-migratepassword/plugin.rb:71:in `crypt’: incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError).

どうやらこれは3番目のユーザーで発生しており、そのユーザー名にはウムラウトが含まれています。

さて、以前は動作していたのに何が変更されたのでしょうか?

  • 新規VM(Ubuntu 18.04.3 LTS、以前は16)
  • Discourseのアップデート(最新版)
  • ユーザー名にウムラウト(äöüßÄÖÜẞ)を含むユーザーが多いため、「Unicodeユーザー名」を有効化(最初のインポートではこの設定がなく、ウムラウトの点が失われてユーザーがインポートされていました)
  • migratepasswordを事前にインストール(前回は後からインストールしました)

どこで失敗しているのかご存知でしょうか?ユーザー名を変更せずにユーザーを移行したいと考えています。

「いいね!」 1

migratepassword プラグインのバグがトリガーされているようです。私のテストでは動作しているため、ここで何が起きているのか確信が持てません。マイグレーション中はプラグインを無効にすることをお勧めします。そもそもマイグレーション中はプラグインは不要です。

「いいね!」 6

ありがとうございます。うまくいきました :slight_smile:

「いいね!」 2

こんにちは、ローカル環境でテスト実行を行い、フォーラムを Discourse に移行できるか確認しようとしています。

Discourse のインストールにはこのインストールガイドを使用しました。

phpBB3 のデータベースエクスポートをローカルに用意しています。
また、Mac の Docker for Desktop を使用してローカルに Discourse をインストールしました。

現在、このトピックの指示に従おうとしていますが、Ubuntu ではなく Docker を使用しているため、かつローカル環境であるため、先に進めずに困っています。Discourse ディレクトリに app.yml が見つかりません。

次の手順についてご教示いただけないでしょうか?

どうぞよろしくお願いいたします!

「いいね!」 1

申し訳ありませんが、Mac、Docker、および当社のセットアップに関する経験がございません。開発環境でのインポートを大まかに参照されることは可能かもしれませんが、これについてはサポートを提供することができません。

「いいね!」 1

個人的な Mac 環境でも、やはり「公式インストールガイド」に従って、その方法でインストーラーを実行されるのが良いかと思います。

「いいね!」 4

やった!インポートに成功しました!
結局、DO のドロレットを取得してそこから進めることにしました。それでうまくいきました!

Sidekiq についての質問です。@gerhard さんはこうおっしゃっています:

これは具体的に何を行うのでしょうか?フォーラムで何か操作できるようになるまで、完了するまで待たなければならないのでしょうか?

「いいね!」 2

異なるサーバーに復元するためのバックアップが必要でない限り、問題ありません。そのまま使用して、Sidekiq が処理を実行します。

「いいね!」 4

こんにちは。現在、phpBB 3.1 フォーラムのデータを Discourse にインポートしようとしています。しかし、ポールのインポートがうまくいきません。

スレッドの所有者(ポール作成者)が削除されている場合、インポート中に以下のエラーメッセージが表示されます。

Error creating post 70978. Skipping. [“You are not allowed to create polls.”]

以下のポールオプションについて
<12
12
>12
以下のエラーメッセージが表示されます。
Error creating post 345655. Skipping. [“Poll must have different options.”]

どのように解決すればよいでしょうか?

あらかじめありがとうございます

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

「いいね!」 1

投票機能を有効にしていますか?

「いいね!」 1

はい、一部のアンケートはインポートされますが、すべてがインポートされるわけではありません。

「いいね!」 1

そのユーザーを作成するか、所有者が存在しない場合はシステムを使用するようにスクリプトを変更する必要があります。

「いいね!」 1

削除されたユーザーの通常スレッドは正常にインポートされます。削除されたユーザーの投票もインポートされるように、インポートスクリプトをどのように変更すればよいでしょうか?

「いいね!」 1

phpBBからの移行を初めて試みており、Discourseのバックアップを後で移行した場合、インポート時のすべてのメタ情報(phpBBの元の投稿IDなど)が含まれるか疑問に思っています。理由は、より大きなマシンでインポートを高速化し、その後にVPSでフォーラムを運用することを考えているためです。ただし、すべてをVPSに移行した後、追加の増分インポートを行う可能性もあります。Discourseのバックアップと再インポートだけで十分なのか、それともデータベースを他の方法(どの方法?)でダンプしたほうがよいのか迷っています。

もう一つ質問です:インポーター内のURL書き換えは、後でドメインを変更する場合でも安全でしょうか?初期移行には異なるドメインまたはサブドメインを使用し、後に実際のドメインに切り替えることを計画しています。

「いいね!」 3

はい、バックアップにはカスタムフィールドに元の投稿 ID が含まれています。クラウド上で最終インポートを実行しても問題ありません。

ホスト名の変更には多少の作業が必要です。Change the domain name or rename your Discourse

「いいね!」 4

最初のテスト移行が完了しました。何よりもまず、@gerhard さんやこの作業に貢献してくださった皆様に感謝申し上げます。初めての試みでこれほどうまくいくとは驚きです。ユーザー、プライベートメッセージ、その他諸々を含め、90 万件弱の投稿をインポートするのに約 24 時間かかりましたが、結果は非常に良好です。これほど優れたインポーターがあるとは本当に素晴らしいですね。

ただし、いくつかの課題もあります。現在最も重要視しているのは、内部リンクの一部が完全に破損しているように見える一方で、他はうまく機能しているという点です。より正確に言えば、正しく処理されたリンクの方がはるかに多いようです。どのリンクが失敗したのかパターンを探っています。内部リンクの変換処理について、何か知見をお持ちの方はいらっしゃいませんか?失敗しやすい落とし穴のようなものはあるでしょうか?

余談ですが、インポート直後には引用内のアバターがすべて表示されていませんでしたが、それらは後から生成されるもので、約 20 分後にすべて表示されるようになりました。面白いものです :wink:

インポート時間について:今回は Hetzner の 4 コア VPS(専用 CPU コア)で実行しました。移行時間を短縮するため、本番環境ではバレルメタルサーバーで再度試そうと考えています。まずは Discourse のバックアップを移動させる方法を検討する必要があります。

「いいね!」 5

内部リンクを置換するコードはここにあります:discourse/script/import_scripts/phpbb3/support/text_processor.rb at 43ddf60cdf27a865b7b1aa0d54a144a3e46c74cf · discourse/discourse · GitHub

内部リンクの書き換えは、投稿にまだインポートされていない別の投稿へのリンクが含まれている場合に失敗します。投稿は、元の作成順にインポートされます。

「いいね!」 6

それは興味深いヒントですね。私が確認したいくつかのケースでは、なぜそのようなことが起こったのかわかりませんが、その方向で調べてみます。奇妙なことに、私の場合は間違った投稿にリンクしてしまいます。失敗した場合、何も行わないか、リンクをそのままにしておくものだと思っていました。残念ながら私のRubyの知識はほぼゼロですが、それでもコードを確認してみます。

この問題を回避する方法はありますか?チュートリアル形式の投稿は、何度も編集・修正され、リンクが追加されることが多いため、この問題は頻繁に発生する可能性があります。これらの投稿を手動で修正する以外に回避策はありますか?

ご協力ありがとうございます!:+1:

「いいね!」 1

ふむ、ユーザーグループがインポートされていないことに気づきました。また、最初の投稿にはリストされていないようですが、インポーターでは最初にリストされるものの一つです。ユーザーをそのグループに紐付けながらインポートする方法があるのか、それともまだ機能していないのか気になります。後者の場合、回避策を見つける必要がありそうです。

「いいね!」 1

はい、それは奇妙ですね。これは、あなたのローカルリンクのいくつかが、インポートスクリプトが想定している形式とは異なる形式で存在していることを示唆しています。その結果、正規表現が誤った投稿を検索してしまいます。もし誰かが過去に、存在しなかった投稿を指すように投稿を編集した場合(その事実を確認されましたか?)、その際はスクリプトを混乱させる別の方法でリンクを作成していた可能性があります。

特に成熟したフォーラムの場合、各インポートがそれぞれ「一匹狼」のような独自性を持つことに驚かされます。インポートが単にスクリプトを実行するだけで済むことは比較的稀です(ただし、インポートに複雑な問題がある場合の方が、私が雇われる可能性は高いのかもしれませんね)。

「いいね!」 1