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

@gerhard:マイグレーション後に Sidekiq を使用して、不正な文字エンコーディングのサニタイズを実現することは可能でしょうか?Discourse はまだ初心者で、仕組みを理解していないかもしれません。
あるいは、MariaDB に直接 SQL スクリプトを実行する方法もあるでしょうか?

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

もちろん可能です!各投稿を手動で編集することもできます。ただし、最初からやり直せるのであれば、事前に処理する方がはるかに簡単(約 10 倍)です。

MariaDB 側でエンコードを修正しようといろいろ試しましたが、解決策は見つかりませんでした。以下は、現在作業中のインポートでエンコードを修正するために使用したコードです。

    ### WIN1252 エンコード
    win_encoded = ''
    begin
      win_encoded = raw.force_encoding('utf-8').encode("Windows-1252",
                            invalid: :replace, undef: :replace, replace: ""
                           ).force_encoding('utf-8').scrub
    rescue => e
      puts "\n#{'-'*50}\nWin1252 の変換に失敗しました \n\n#{raw}\n\n"
      win_encoded = ''
    end
「いいね!」 1

ありがとうございます :slight_smile:

「いいね!」 1

それは苦痛を伴う経験でした。私は複数のエンコーディングを試み、比較できるように投稿に複数のエンコーディングを含めました。この方法がほとんどの場合、ほとんどの問題を解決しているように思えました。.scrub の使い方を理解するまでに、望んでいたよりもずっと時間がかかりました。なぜなら、これを使わなければ、gsub でパースできなくなる文字列ができてしまうからです。

phpBB からネストされたリストをインポートする良い解決策を持っている人はいますか?

Ruby の専門家ではないので、どのようにアプローチすればよいか分かりません。このコードを見ています。

 def process_lists(text)
      # リストタグを ul に、list=1 タグを ol に変換
      # list=a はサポートされていないため、list=1 として処理
      # list=9 と list=x は list=1 と list=a と同じ結果になる
      text.gsub!(/\[list\](.*?)\[\/list:u\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "* #{$1}\n" }
      end
      text.gsub!(/\[list=.*?\](.*?)\[\/list:o\]/mi) do
        $1.gsub(/\[\*\](.*?)\[\/\*(:m)?\]\n*/mi) { "1. #{$1}\n" }
      end
    end

ネストされたリストを「ループ」処理する方法について、アイデアはありますか?

以下に BBCode の例を示します。

[list]
   [*]
   [list=a]
      [*]a
      [*]b
      [*]c
      [*]d
      [*]e
   [/list]
   [*]outer list
[/list]
「いいね!」 1

@helmi

公式の Discourse BBCode プラグインが LIST タグの処理にどう役立つか確認しましたか?

「いいね!」 1

まだ確認していませんが、確認します。ありがとうございます。ただ、長期的には追加の BB タグをサポートしたくないため、使用を避けるようにしています。インポート時に変換することを本当に希望しています。ネストされたリストは致命的な問題ではありませんが、あると大変便利です。

バックアップを作成し、phpBB 3.2 にアップグレードして、私の実験的なブランチを使用することもできます。これには、BBCode のサポートが大幅に向上しています。:wink:

「いいね!」 1

興味深い提案ですが、phpBB をいじくるのは避けたいですね。リストの扱いを除けば、インポートプロセスはすでにほぼスムーズに進んでいます。これでは作業量とテストが増え、後退してしまう恐れがあります。ただ、3.2 の進捗が順調に進んでいるのは心強いです。

@helmi さん、こんにちは

はい、私たちは過去 1 ヶ月ほど、こうした問題に頭を悩ませています。ほぼ 20 年にわたるあらゆる種類の奇妙な bbcode の使用、ネスト、埋め込みなどを含むレガシーな vB3 フォーラムの移行を行っています。

このような移行を 99.9% 完璧にすることは容易ではありません。例えば、マークダウンは fenced コードブロック内で bbcode を「好まない」ため、コードタグからすべての bbcode タグを削除する Ruby コードを書きました。

当方では、まだ多くの Ruby の前処理ルーチンを最終調整中ですが、徐々に改善されつつあります。しかし、ほぼ 20 年にわたる非常に創造的な bbcode ユーザーによる投稿(さらに、投稿にコピー&ペーストしたユーザーなど)を考えると、「完全」や「100%」に到達することは決してないでしょう。

BB コードから Markdown への移行に関連する問題の解消をまだ進めています。

時々、「全部削除してしまえ」と思ってしまうこともあります… LOL

「いいね!」 1

ユーザー名に特殊文字が含まれている場合、変更されたり、全くインポートされなかったりする問題がまだ発生しているようです。

インポーターに既知の問題はありますか、それとも Discourse での Unicode ユーザー名オプションの設定を誤っているのでしょうか?有効にしましたが、ホワイトリストにはウムラウト記号が含まれたままです。すべての Unicode 文字を許可するためにホワイトリストを削除する必要がありますか、それともすべての文字をリストアップする必要がありますか?私の考えでは、Unicode を有効にすればすべての Unicode 文字が許可され、無効にすればホワイトリストに登録された文字のみが許可されるはずでした。

インポート時に、@ や * などの一部の文字が _ に置換されているようです。@ はメンションで問題を引き起こす可能性があることは想像できますが…インポート前にすべてのユーザーを手動で処理する(これは大きな手間になるでしょう)前に、確認したかっただけです。

何かヒントはありませんか?

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

Unicode サポートを有効にしても、文字と数字のみが許可されます。詳細は Unicode usernames and group names をご覧ください。

「いいね!」 2

こんにちは、

まず、このトピックに関するすべてのドキュメントとご支援に感謝いたします。
古い phpBB3 フォーラムを、新しい Discourse へインポートしました。

20 万件の投稿と 2 万件の添付ファイルがありましたが、インポート自体は非常にスムーズに進行しました。ただし、インポート後に Sidekiq がすべてのデータを処理する際に少し問題が発生しました。

現在、新しい問題に直面しています。URL タグ内に画像タグが含まれていた場合です。例:
[url=http://www.casimages.com][img]http://nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg[/img][/url]

インポート後(bbcode から markdown への変換後)、これらの画像は単なるリンクとして表示されてしまいます:
[nsm01.casimages.com/img/2009/04/24//090424092900546293539010.jpg](http://www.casimages.com)

これらのリンクを処理・再加工して、画像として表示され、自動的に S3 にアップロードされるようにする方法はありますか?

ご支援を心よりお待ちしております。

システム設定で「ダウンロード リモート」を検索してください

追記:おっと、それはあなたの問題ではなかったようです。すみません。

@pfaffman

ジェイ、ありがとう。はい、すでに「リモートをダウンロード」設定を有効にしています。私の問題は、これらの画像がリンクとして表示されることです(画像の URL はリンクの「表示部分」に過ぎず、ターゲットは画像コンテンツと一致していません)。

「いいね!」 1

こんにちは、

現在、phpBB からインポートされたフォーラムを持っています。
既存の Discourse インストール内に、別の phpBB フォーラム(メッセージ 36,000 件、メンバー 230 名)をインポートしようと考えています。カテゴリとユーザーは共通しています。

ユーザーアカウントは手動でマージできます。
メッセージについては、インポート後に既存のカテゴリへ手動で移動させる予定です。

これはインポートスクリプトから「そのまますぐに」機能するでしょうか、それとも大混乱を招くでしょうか?

phpBB フォーラムをインポートした際、既存の Discourse に既に存在するユーザーのメールアドレスと重複した場合、どうなるのでしょうか?

import_id カスタムフィールドをクリアする必要があります。そうしないと、新しい投稿は既にインポート済みとみなされてしまいます。

これは、メインデータベースのバックアップを使用してローカル環境で試す際に、よくある手間がかかる作業だと思われます。

「いいね!」 2

この貴重な情報をありがとうございます。私自身は思いもよっていませんでした :+1:t6:
はい、その方針で進めます。テストサーバーで試して、管理可能かどうかを確認します。

背景について:

私は国内の自転車(ユニサイクル)に関する Discourse フォーラムを運営しています。
また、地元のユニサイクル協会向けの phpBB フォーラムも運営しています。
両方のフォーラムには共通のユーザーがおり、トピックや議論の主題が重複しています。そこで、地元の協会フォーラムを国内フォーラムに統合し、重複をなくすとともに、協会関連のトピック専用のグループやカテゴリを作成することを検討しています。

さらに、地元の協会フォーラムだけのユーザーもこの機会に国内フォーラムに参加し、活発化につながるかもしれません。

MySQLがインポートコンテナで動作しない理由がわかる方はいらっしゃいますか?

これまでに何度か実行しましたが、いつも問題なく動いていました。しかし今回は以下のようなエラーが表示されます。

Can't connect to local MySQL server through topic:30810

インポートを開始しようとすると、エラーが発生します。すべてを3回確認し、インポートコンテナを数回再構築しました。すべてのファイルは存在しているようですが、MySQLが実行されていないようです。:frowning:

実は今日がDiscourseへの本番移行なので、少し驚いています。

:question: :question::question: それは奇妙ですね。どこから来ているのですか?