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

少なくとも、古い投稿が新しい投稿へリンクするケースだけでなく、この現象が発生していると言えます。

私が最初にこの問題に気づいた例を一つ挙げます。

元の投稿 ID: 842948 は、すでに存在していたスレッドの 22 ページ(&start=220)へリンクしています。そのスレッドの最初の投稿の ID は、リンク元の投稿(842880)よりも低い値です。

インポート後、この元の投稿(ダンプ作成のわずか数日前に投稿されたもの)は、7 年前のスレッドへリンクしています。そのスレッドの最初の投稿の元の ID は 1353 です。

なぜこのようなことが起こるのか、数値にどのような類似点があるのか、いかなる手がかりも見つけられていません。元のリンクは単なる投稿された URL で、phpBB によって自動的にリンク化されたものです。一般的に、このようなリンクは問題を引き起こすことはなく、他の場所では正常に機能しています。

全体的に、インポートがすぐに完璧に行われるとは期待していません。これまでの進捗には本当に満足していますが、この問題は修正が最も難しいものの一つになる可能性があります。特に、Discourse での開発・デバッグ環境の構築方法がまだわからないためです。近々、その点について詳しく調べる必要があるかもしれません。

「いいね!」 3

こんにちは、
私の記憶では、phpBBインポーターはデフォルトで、ユーザーのメールアドレスから推測して、Discourseユーザーのフルネームを自動入力していました。私の認識は合っていますか?また、現在もそのようになっていますか?インポーターのファイルにはそのような記述が見つかりません。

次のフォーラムをインポートする際に、このような動作は避けたいと考えています。

また、もう一つ質問があります。

現在のphpBBフォーラムには、カスタムユーザーフィールド(FacebookやInstagramのURLなど)があります。これらをDiscourseのカスタムフィールドとしてインポートしたいと考えています。おそらく、まずDiscourseをインストールして設定し、これらのカスタムユーザーフィールドを追加した後、phpBBのデータを独自のスクリプトでインポートする必要があるのでしょうか?

「いいね!」 1

その動作は現在行われていません。

それは良い計画のようですね。

「いいね!」 6

phpBBからDiscourseへ移行した後に、Discourseがユーザーに送信する月間のメール数を信頼性高く見積もる方法はありますか?新規ユーザー登録、メンション、返信、週次ダイジェストなど……phpBBはデフォルトでは非常に少ないメールしか送信していませんが、現在のメールプロバイダーを変更する必要があるかもしれません。
現時点では、実際のphpBBからの統計データがあまりありません。2013年から存在し、メッセージ数は20万件、会員数は5500人です。新規メンバーは毎日登録しています。

「いいね!」 1

1 日に何件の投稿がありますか?

「いいね!」 1

まだわかりません。現時点では公開統計しかないです。たぶん20件ほどでしょう。

「いいね!」 1

1日20投稿程度であれば、月間最大でも3000通程度のメールになると思います。これは無料のMailgunプランの範囲内です。

ただし、多くのユーザーを移行されるとのことですので、過去1〜2ヶ月以内にフォーラムにアクセスしていないユーザーについては、ダイジェストメールをオフにすることをお勧めします(必要であれば、後で各自でオンにできます)。これはRailsコンソールでクエリを実行して設定できますが、私が自分のフォーラムでやったのは1年以上前なので、正確なコードを覚えていません、申し訳ありません。

個人的には、これはインポートスクリプト側で対応すべきことだと思います。理想を言えば、最終アクセスからの期間に応じてダイジェストメールを有効にする設定を用意してほしいですね。

「いいね!」 4

私は同意しません。それはインポートスクリプトが行うべきことではありませんが、このためのサイト設定があります:suppress digest email after days

「いいね!」 4

確かに :slight_smile: 現在のフォーラムで最初の phpBB インポートを行った後、デフォルト値を下げざるを得ませんでした。メールプロバイダーが、送信されたダイジェストメールの量により使用されたアドレスを自動的にブロックしたのです。スパムとしてフラグが立てられました。

「いいね!」 1

それは少し違いますね。個人的には、ユーザーが購読して登録した後に、最後の訪問から X ヶ月間ダイジェストメールを送信すること(フォーラムを訪れていなくても、ダイジェストメールは読んでいる可能性があります)と、前のフォーラムで登録しただけでダイジェストメールを購読していないユーザーに送信することには明確な違いがあると思います。後者は、一部の管轄区域では違法となる可能性さえあります!移行された全ユーザーに対してダイジェストを単純に無効にし、必要に応じて各自で有効化できるようにするか、あるいは私が行ったように、過去 1 ヶ月以内に訪問し、「フォーラムの移行が間もなく行われます」というアナウンスを目にしたユーザーのみを対象に有効にするという方法もあります。それが公平な妥協点だと考えます。

また、これは実用的でもあります。当社の phpBB フォーラムでは、過去 1 年間に何千ものスパムアカウントが作成されました。これらに月 4 回ダイジェストを送信すると、無料の Mailgun クォータを使い果たし、その後は高額な費用が発生していました。「N 日間の非アクティブユーザーを削除」という設定を徐々に適用することで、最終的にそれらのアカウントを整理できました。

「いいね!」 5

ここか別のトピックに該当するかわかりませんが、phpBB 3 からの移行に関する話題なので投稿します。

私は 1 つのデータベースを使って Discourse への移行に成功しました。しかし、3 つの異なる言語、3 つの異なる phpBB インストールからなる 3 つの独立したコミュニティがあります。理想的には、これらをすべて 1 つの大きな Discourse フォーラムに統合したいと考えています。

私の質問は、これを行うにはどうすればよいか、またインポートスクリプト、phpBB 3 のデータベース、あるいは他の場所で何を変更する必要があるかということです。
いくつかのユーザーは複数のフォーラムにアカウントを持っていますが(中には 3 つすべてにアカウントを持つユーザーもいるかもしれません)、シングルサインオンがないため、各フォーラムでは同じユーザー名で異なるアカウントが作成されています。これらはすべて異なるインストールと異なるデータベースです。
これが実現可能なら素晴らしいのですが!

ご支援をありがとうございます!

「いいね!」 1

そのままでは動作しません。インポートスクリプトは元の ID を Discourse データベースに保存するため、同じ ID のレコードが存在すると追加のフォーラムからのデータをインポートしないからです。ただし、これを解決する方法が 2 つ考えられます。

  1. 難易度高:インポートスクリプトを複数の箇所で編集し、投稿、トピック、カテゴリ、ユーザーに保存される import_id カスタムフィールドに各フォーラムのプレフィックスを追加する必要があります。

  2. 簡単ですが、増分インポートの機能が失われます:各インポート後にカスタムフィールドを削除します。

    TopicCustomField.where(name: 'import_id').delete_all
    PostCustomField.where(name: 'import_id').delete_all
    CategoryCustomField.where(name: 'import_id').delete_all
    UserCustomField.where(name: 'import_id').delete_all
    

解決策 2 は未検証ですが、理論的には動作するはずです。試す前に必ずバックアップを作成してください。

「いいね!」 7

新年前の最初のテストの後、移行プロジェクトが再開されました。現在、まだ最大の課題の一つはリンクの書き換え失敗であり、それをどのように最も適切に処理するかを検討しています。

@gerhard 私のコーディング知識は非常に基礎的であり、Rails や Discourse の構造の詳細については全く知識がありません。そのため、以下の質問についてご容赦ください:インポート処理がリンクから指定された ID のインポート済み投稿を見つけられない場合、それを誤ったリンクに置換する代わりに、ユーザーや管理者に通知するテキストを追加し、インポート後に問題のあるリンクを検出可能にするような対応は可能でしょうか?

現在の動作における私の主な懸念は、これらのリンクが正常に置換されたように見えるだけで、インポート後にそれらを見つけ手動で修正する方法がないことです。

ご支援いただける場合は、大変感謝いたします。

「いいね!」 1

一つの方法は、スクリプトを書き換えて、すべての投稿がインポートされるまでリンクの置換を行わないようにすることです。サポートが必要で予算がある場合は、私に連絡するか、Marketplace に投稿してください。

「いいね!」 4

残念ながら、このプロジェクトは予算が限られており、おそらくこの問題に予算を割くほど重要ではないと思いますが、あなたが対応可能であることは大変心強く思います。

もう一つ質問があります:インポート時に BB コードの扱いが異なることに気づきました。例えば、[size] はテキストとして残りますが、[color] は完全に削除されているようです。色を再利用したいと思い、Discourse のプラグインがあることに気づいたのですが、インポート時に削除されているようです。最初の投稿では BB コードがインポートできると書かれていましたが、どの BB コードがインポートされるかを制御する設定が見つかりませんでした。

可能であれば、size タグを削除し、color タグは残したいと考えています。この処理について何か見落としていることはありますか?また、どのように変更できるでしょうか?

「いいね!」 1

phpbb フォーラムで削除(prune)されたトピックが、消えたと思っていたのに、なぜか Discourse に移行されていることに気づきました。

どうしてそのようなことが起こるのでしょうか?

「いいね!」 1

これを行おうとしているのですが、手順で迷っています。ここで言及されている設定ファイルとはどのファイルのことでしょうか?また、これはインポート前に行うのでしょうか、それとも後でしょうか?
あらかじめありがとうございます!

編集:つまり、管理CP(コントロールパネル)内の絵文字設定ファイルを指しているのでしょうか?テキストファイルのインポートなどでこれを行う方法はありますか?カスタムスマイリーが約100種類あるので、そのマッピングをDiscourseにコピーしたいと考えています。可能でしょうか?(phpBBのsmilies.pakファイルを何らかの方法でDiscourseの設定にコピーすることはできますか?)

「いいね!」 1

インポーターの設定ファイルを確認しましたよね?:wink:

「いいね!」 3

phpBBは通常の削除トピックとは異なり、削除(pruned)されたトピックを別様に扱っているようです。その場合、現在ではサポートされていません。phpBBが削除(pruned)されたトピックをどのように削除としてマークしているかを確認し、インポートスクリプトを修正する必要があります。

「いいね!」 3

あー、そうそう!確かに、最初のコンバージョンからずいぶん経ってましたね。すっかり忘れていました、ありがとう!

削除されたトピックについては、確かにそうだったと思います。私のフォーラムでは大きな問題ではありませんが、驚きましたし、他の人にもこのことが起こりうるかもしれないという事前情報として役立つかもしれません。

「いいね!」 1