Migrate a XenForo forum to Discourse

インポートする前に、信頼レベル、バッジ、その他のDiscourseの設定をすべて設定しても安全ですか? このインポーターは、投稿/スレッド/プロフィールを挿入/置換するだけだと思いますか? Discourseの設定をすべて設定したのに、コードに関連するものは何も見当たらないにもかかわらず、これらの設定が消去されてしまうのは避けたいです。

はい、ただしバックアップを取ってください。設定を変更して複数回実行する必要がある可能性が高いため、インポートされたデータがない設定のバックアップを保持してください。

挿入します。ほとんどの場合、置換は行いません。ユーザーが存在する場合、変更されません。設定したカテゴリは使用しません。古いサイトから更新されたデータベースで再度実行すると、新しいデータが追加されますが、以前の実行でインポートされたものは変更されません。これにより、はるかに高速になりますが、何らかの理由でスクリプトを変更する必要がある場合は、すべて削除して最初からやり直す必要があります。

「いいね!」 4

いくつか質問があります。まず、この処理を高速化する方法はありますか? 32 CPU、64GB RAM の Linode を使用していますが、250,000 件の投稿のインポートに 4〜5 時間かかっています。

次に、添付ファイルは投稿の前後にインポートされますか? スクリプトを見ると、後でインポートされるように見えます。添付ファイルがインポートされなかったことを知るために 4〜5 時間待たなければならないのは残念です。

ほとんどの部分で、すべてはそれ以前のデータに依存しています。後処理は複数のCPUを利用できますが、ほとんどの場合、完了するまで開始されません。より高速な単一CPUを入手してください。

スクリプトを変更して最近のアップロードのみをインポートするようにできますが、大規模な開発を行う予定がない場合は、5時間待つだけです。

「いいね!」 2

いくつか試しましたが、添付ファイルがインポートされず、もうアイデアが尽きそうです。どなたか助けていただけないでしょうか(@pfaffman、これまでのご協力ありがとうございます)。

*.data ファイルを xenforo からの元のフォルダ構造(つまり、「attachments」フォルダ)で、docker コンテナ内の /root/attachments に配置しました。インポートスクリプトを /root/attachments に更新しました。ls コマンドで /root/attachments 内のファイルを確認できます。

スクリプトを実行しましたが、毎回(約4〜5時間待った後)、添付ファイル/写真を含むすべての投稿に、xenforo の古い bbcode([ATTACH]123456[/ATTACH])が表示され、discourse インストールに画像や添付ファイルが表示されません。

何が間違っているのでしょうか?あと 90% はできている気がするのですが、何か見落としているようです。

コードを確認する必要があります。添付ファイル コードは実際に実行されていますか? アタッチメントはスクリプトが期待する形式になっていますか?

添付ファイル機能が投稿のインポート後に実行される場合、全体を再度実行する必要はありません。投稿はスキップされるだけです (または、投稿のインポートをコメントアウトして少し速くすることもできます)。

しかし、正しく設定されていないことから、単に ZenForo のバージョンで動作しないことまで、さまざまな問題が発生する可能性があります。コードを確認し、デバッグ出力を追加して何が起こっているのかを確認する必要があります。

念のため、このスレッドを見ている方のために、このスクリプトでは添付ファイルをどこに配置しても機能させることができませんでした。私の意見では、スクリプトには修正が必要であり、特に説明は、どこに何をどのように配置するかをより明確にするために、多くの作業が必要です。

それまでは、このスクリプトは壊れていると考えます。

おそらく、一部の人々が一部のバージョンと一部の設定で動作するのでしょうが、あなたが使用しているものではありません。インポートごとにどれほど異なるかは驚くべきことです。

XenForo の公式インポートスクリプトは現在壊れていますか?

ユーザーとカテゴリのインポートは正常に行われますが、
添付ファイルフォルダを含む投稿のインポートで問題が発生しています。

script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
   113289 / 146471 ( 77.3%)  [3766 items/min]  Exception while creating post 162516. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'
/var/www/discourse/lib/post_creator.rb:407:in `transaction'
/var/www/discourse/lib/post_creator.rb:205:in `create'
/var/www/discourse/script/import_scripts/base.rb:580:in `create_post'
/var/www/discourse/script/import_scripts/base.rb:528:in `block in create_posts'
/var/www/discourse/script/import_scripts/base.rb:515:in `each'
/var/www/discourse/script/import_scripts/base.rb:515:in `create_posts'
script/import_scripts/xenforo.rb:180:in `block in import_posts'
/var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
/var/www/discourse/script/import_scripts/base.rb:907:in `loop'
/var/www/discourse/script/import_scripts/base.rb:907:in `batches'
script/import_scripts/xenforo.rb:174:in `import_posts'
script/import_scripts/xenforo.rb:32:in `execute'
/var/www/discourse/script/import_scripts/base.rb:47:in `perform'
script/import_scripts/xenforo.rb:396:in `<main>'
   113290 / 146471 ( 77.3%)  [3766 items/min]  Exception while creating post 162517. Skipping.
undefined method `synchronize' for #<DiscourseRedis:0x00005571b2d0c5b8>
/var/www/discourse/lib/discourse_redis.rb:44:in `method_missing'
/var/www/discourse/lib/distributed_mutex.rb:84:in `try_to_get_lock'
/var/www/discourse/lib/distributed_mutex.rb:61:in `get_lock'
/var/www/discourse/lib/distributed_mutex.rb:30:in `block in synchronize'
/var/www/disc

Redisのバージョンは何ですか?

既存のXenForoコミュニティをなんとかDiscourseに移行できたので、同じことを試みている人のために経験を共有したいと思います。私は何もわかっていないので、私の推測は間違っている可能性があることに注意してください。添付ファイルの約20%を失ってDiscourseへのインポートを完了することができました。その理由は本当によくわかりませんが、問題はフォーラムの過去2〜3年間の投稿にのみ影響しているようです。それ以前のものは約95%以上の成功率でインポートされました。私の唯一の推測は、XF 1.xからXF 2.xへの移行と関係があるということです。

これを試みる人は誰でも、このスクリプトはXF 2.xで動作するように多くの更新が必要であることを知っておくべきです。具体的には、375〜378行目には、XenForo Media Galleryから添付ファイルをインポートするための正しいデータベーステーブルがありません。私はXFMGをフォーラムから切断し、アンインストールすることでこれを回避しました。なぜなら、私はフォーラムの添付ファイルをミラーリングするためにXFMGを使用していただけだったからです。

興味があれば、376行目はテーブルxengallery_mediaを参照しています。これは明らかにXFMG 1.xへの参照です。このテーブルはXFMG 2.xではxf_mg_media_itemに変更されています。残りの部分は一致させることができず、添付ファイルのIDと投稿を一致させるために追加のコードが必要だと疑っています。

私は314行目をコメントアウトしました:s = process_xf_attachments(:gallery, s)

これにより、スクリプトが欠落しているSQLテーブルでエラーを発生させないようにしました。

その後、このスレッドの@Jack51さんの投稿に従いました。

以下の編集を行いました。

ステップ6では、mariadbのバージョンを更新する必要があります。mariadb-server-10.3mariadb-server-10.5に変更してください。

ステップ7は、service mysql startではなくservice mariadb startであるべきです。

私は変更しました

frozen_string_literal: true

frozen_string_literal: false

このスレッドで他の人が言及していたのと同じエラーが発生したためです。

このスレッドでは、スクリプトが添付ファイルを見つけられるようにどこに配置すべきかについて、かなりの混乱があったようです。私もそれに苦労したことを認めざるを得ません。Dockerに完全に慣れていない人(私のような)にとっては、Dockerはサーバー上で実行される仮想マシン(つまり、2つの異なるOS/ファイルシステムを扱っていることになります)ですが、ファイルを転送するための共有スペースがあることを指摘するのは非常に役立ちます。

/var/discourse/shared/standalone/tmp

このディレクトリはホストマシンにあり、そこに入れたファイルは次の場所に表示されます。

/shared/tmp

Dockerコンテナに入ったとき。したがって、XenForoから同じファイル/フォルダ構造を維持していると仮定すると、フォルダをコピーします。

internal_data/attachments

ホストマシンの

/var/discourse/shared/standalone/tmp

にコピーすると、Dockerコンテナに入ったときにそのフォルダが/shared/tmpに表示されます。

次に、xenforo.rbスクリプトを編集するときは、次のように変更します。

ATTACHMENT_DIR = '/tmp/attachments'

ATTACHMENT_DIR = '/shared/tmp/internal_data/attachments'

とすると、添付ファイルは正しい場所に配置されます。XenForoにはdata/attachmentsフォルダもありますが、探している.dataファイルではなく.jpgファイルでいっぱいであることに注意してください。以前にこのスレッドで誰かがこの間違いを犯したのを見たので、指摘する価値があると思いました。

また、スクリプトから権限エラーが発生したので、ディレクトリにchmodする必要があるかもしれません。

sudo chmod a+rw -R /shared/tmp/internal_data/

スクリプトが添付ファイルを認識していない最大の兆候は、奇妙に静かになることですが、実際には時折エラーを出すはずです。

したがって、インポートがエラーなしで数時間続く場合は、添付ファイルが認識されていない可能性が高いです。

以上です。誤解しないでください。このスクリプトが存在すること自体に感謝しています。80%の成功率は何もないよりましです(2009年にvBulletinからXenForoに移行したときも同様の成功率でした)。Discourseプラットフォームで作業できることを楽しみにしています。この投稿が多くの人を助け、いつか私よりもスキルのある人がこのスクリプトをより良く動作するように更新してくれることを願っています。

「いいね!」 4

現在のインポートスクリプトのバージョンでは、投稿BBコードに常に添付ファイルが埋め込まれているわけではないため、多くの添付ファイルが見落とされていました。いくつかの改善と修正を行ったプルリクエストを作成しました。スクリプトはすべての添付ファイルを認識し、いいね、アバター、プライベートメッセージもインポートできるようになり、カテゴリとトピックのパーマリンクも作成します。

「いいね!」 5

@gerhard 現在、そのPRはgerhardさんの担当になっているかと思います。お時間のある時にマージしていただけますでしょうか?

「いいね!」 2

はい、昨日気づきました。:blush: すっかり忘れていました。今日か来週レビューします。

「いいね!」 1

これはコードにマージされましたか?他の理由で XenForo に戻らなければなりませんでしたが、このスクリプトが機能したら Discourse に移行したいと思います。

すみません、GitHub を確認すべきでした。11 月 28 日にマージされたようです。

「いいね!」 1

6件の投稿が新しいトピックに分割されました: AVATAR_DIR 定数が XenForo インポートスクリプトで指定されていません

Xenforoから(Googleなどでこのスレッドを見つけて)移行しようとしている方のために、Flarumフォーラムソフトウェアのインポーターがここでテストされていることをお知らせします。

「いいね!」 1

興味深いですね。しかし、もししっかりした XenForo から Discourse へのインポーターがあれば、さらに興味深いものになるでしょう。

その方は自分のやっていることに非常に自信を持っているようで、称賛に値します!

「いいね!」 1

最近XenForoのインポートを行いました。機能を追加するためにいくつかの変更を加えましたが、そのフォーラムに固有ではなかったものがどれだったか、今は思い出せません。

これらの手順はUbuntu 22.04には古くなっていますか?

MYSQLのインストールに成功した後、これが起こります:

root@root-app:/# sudo mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)