MyBB フォーラムを Discourse に移行する

このチュートリアルでは、公式の MyBB インポータースクリプト を使用して、MyBB フォーラムを :discourse: プラットフォームに移行する方法を学びます。

移行可能な項目

  • カテゴリ
    • ルートカテゴリ ⇒ ルートカテゴリ
    • 子カテゴリ ⇒ サブカテゴリ
    • ルートフォーラム ⇒ サブカテゴリ
    • 子フォーラム ⇒ サブカテゴリ
  • スレッドと返信 ⇒ トピックと投稿
  • ユーザー
    • ユーザー名
    • メールアドレス
    • 権限ステータス
    • 登録ステータス
  • リダイレクト

私たちの計画は非常にシンプルです:

  • ローカルの DEV 環境をセットアップする。
  • 本番環境のデータベースをエクスポートする。
  • 本番環境のデータベースを Discourse にインポートする。
  • MyBB インポータースクリプトを実行する。

それでは始めましょう :slightly_smiling_face:

ローカルの DEV 環境のセットアップ

まず、Discourse プラットフォーム自体をインストールするために、以下のガイドのいずれかに従ってください。問題が発生した場合は、こちらのガイド を参照してください。

MySQL データベースサーバーをインストールします。

MacOS:

$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

サービスのステータスを確認します:

$ brew services list

以下のような表示が現るはずです:

mysql@5.7         started

表示されない場合は、以下を実行して再度お試しください:

$ brew services start mysql@5.7

Ubuntu 18.04:

$ sudo apt update
$ sudo apt install mysql-server -y

MySQL のインストールが完了したら、そのステータスを確認します:

$ systemctl status mysql.service

実行されていない場合は、以下を実行します:

$ sudo systemctl start mysql

Windows の場合は、公式の インストールガイド に従ってください。

この環境を「Discourse サーバー」と呼びます。

本番環境のデータベースのエクスポート

本番環境のデータベース(MyBB 本番サーバーから)をエクスポート/バックアップします:

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql
  • このデータベースダンプを Discourse サーバー にコピーします。

:bulb: データベースのコピーには scp または rsync を使用できます。

本番環境のデータベースを Discourse にインポートする

Discourse サーバー で、データベースを作成します:

$ mysql -u root

:bulb: DB ユーザーにパスワードが設定されている場合は、mysql -u root -p を実行し、パスワードを入力してください。

mysql> CREATE DATABASE mybb;

データベースが正常に作成されたことを確認するために、以下を実行します:

mysql> SHOW DATABASES;

以下のような表示が現るはずです:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mybb               |
| sys                |
+--------------------+

現時点で mybb データベースは空です。次のステップは、本番環境のデータベースをこのデータベースにインポートすることです。

$ mysql -u root mybb < mybb_dump.sql

後でテーブルプレフィックスが必要になります。ここで取得しておきましょう。

$ mysql -u root
mysql> USE mybb;
mysql> SHOW TABLES;

以下のような表示が現るはずです:

+--------------------------+
| Tables_in_mybb           |
+--------------------------+
| mybb_adminlog            |
| mybb_adminoptions        |
| mybb_adminsessions       |
| mybb_adminviews          |
| mybb_announcements       |
| mybb_attachments         |
| mybb_attachtypes         |
| ...残りのテーブル....|
+--------------------------+

出力が示す通り、テーブルプレフィックスは mybb_ です。

MyBB インポータースクリプトの実行

  • まず、インポーターの依存関係をインストールします。Discourse サーバー から:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

次に、スクリプトが正常に実行されるように設定します。以下の内容をシェルのコピー&ペーストしてください(必要に応じて値を変更してください):

export DB_HOST="localhost"
export DB_NAME="mybb"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="mybb_"

スクリプトを設定する別の方法として、任意のエディターで script/import_scripts/mybb.rb を開き、二重引用符内の値を要件に合わせて変更します:

  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME'] || "mybb"
  DB_PW ||= ENV['DB_PW'] || ""
  DB_USER ||= ENV['DB_USER'] || "root"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "mybb_"

クリーンな Discourse インスタンスでインポーターを実行します:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/mybb.rb

インポーターは MySQL サーバーに接続し、MyBB データベースを Discourse データベースに移行します。

インポーターが完了したら、以下を実行して Discourse インスタンスを起動します:

$ bundle exec rails server

次に、移行されたデータを処理するために Sidekiq(バックグラウンドジョブプロセッサ)を起動します:

$ bundle exec sidekiq

:bulb: http://localhost:3000/sidekiq/queues で Sidekiq の進捗状況を確認できます。

この チュートリアル に従って、Discourse 本番サーバーをセットアップします。

Discourse プラットフォーム(ローカルの Discourse サーバー)のバックアップを作成し、この チュートリアル に従って Discourse 本番サーバーにアップロードします。

:tada:

このプロセスについてご質問があれば、喜んでお手伝いします。

楽しい移行を :grinning:

「いいね!」 9

こんにちは。素晴らしいガイドのようですが、私は Cpanel ユーザーであり、Linux ユーザーではありません。共有ホストから移行する際、元のホストにはルートアクセスや SSH アクセスがありませんが、Cpanel の phpMyAdmin にはアクセスできます。そこから MyBB データベースをエクスポートすることは可能です。これで問題ないでしょうか?特別なエクスポート設定は必要ですか?また、このデータベースは Digital Ocean の Droplet 上のどのディレクトリにコピーすればよいでしょうか(FileZilla を使用しています)?

はい。

どちらでも構いません。ホームディレクトリで問題ありません。

「いいね!」 3

またこんにちは。チュートリアルのこの時点までは進めることができました。

bundle install

しかし、私にとってはここでエラーが発生します。

'Bundler を root として実行しないでください。必要に応じて sudo を要求する場合があります。
root として bundle をインストールすると、このマシン上の非 root ユーザー全員に対してこのアプリケーションが破損します。
Gemfile に gem サーバーのソースが指定されていません。マシンにまだない gem が必要な場合は、Gemfile に以下のような行を追加してください:
source ‘https://rubygems.org
Gemfile に記載されている gem ソースから gem ‘mysql2’ が見つかりませんでした。

何かアドバイスはありますか?

残念ながら、Ruby や Linux、Gemfile については何も知らず、チュートリアルの指示通りに PuTTY を介してコマンドをコピー&ペーストして、Discourse CLI のセットアップタスクをただ漫然と進めているだけです。何も理解できていません。

Ubuntu と Discourse を Digital Ocean の Droplet で実行しています。これが役立ちますか?

また、その後にデータベースのエクスポートコマンドを「shell」に貼り付けるという参照があります。実用的には、現在の PuTTY 接続が「shell」に相当するのでしょうか?それとも別のインターフェースやコンソールが必要なのでしょうか?

OK、自分自身の質問への部分的な回答として、フォーラムでの無作為な試行錯誤から、

$ sudo apt-get install libmysqlclient-dev

を実行すると、mysql2 gem(それが何であれ)のインストールが可能になるようです。ただし、root 権限でこれを実行しないよう警告されていることは無視します。

その問題を乗り越えて次のステップに進むと、

$ bundle exec rails db:drop

と入力すると、別のエラーが発生します:

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile?

/usr/local/bin/を確認すると、確かに ‘rails’ という名前のファイルが存在しています。

sudo gem や gem install rails、あるいは $ sudo gem install rails を試してみても、このエラーに関する様々な提案に従っても改善されません。

さらに、通常の依存関係がすべて揃っているか確認するために、Ruby on Rails を最初から再インストールしました(https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-18-04)。バージョン 2.5.1 または 2.6.1 を使用しても状況は変わりません。

もう完全に手が届かない領域に来ています…

はっきり申し上げますが、このガイドに書かれている通りに進めても、Windows 10 上の WSL2 環境に Ubuntu-18.04 をインストールし、公式の手順に従ってローカル開発環境を構築しようとする人には、全く機能しません。ほぼすべての段階で、依存関係が不足している、接続が拒否された、といったエラーが発生します。

多くの苦難とオンラインでの調査を経て、私は以下のコマンドまでたどり着くことができました。

$ bundle exec ruby script/import_scripts/mybb.rb

しかし、これを実行すると以下のような応答が返ってきます。

mysql2/client.rb:90:in `connect’: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

これは行き詰まりの状態です。オンラインで検索して見つかったものは、この問題に対する動作する解決策を提供しているようには見当たりません。

これをどう解決し、次のステップに進めばよいでしょうか?ご助力いただければ幸いです!

「いいね!」 1

こんにちは。DigitalOcean の droplet にデータベースをアップロードするにはどうすればよいでしょうか?私は DigitalOcean の 1 クリックインストールを使用して Discourse(Ubuntu)をインストールしました。
私の PC は Windows 10 Home 18362 ビルドバージョンです。

その後、MySQL をインストールしましたが、MyBB のデータベースをサーバーに「物理的に」アップロードする方法がわかりません。データベースを簡単にインポートできる phpMyAdmin はないのでしょうか?:frowning:

「いいね!」 1

scp または同様の手段を使用してファイルをアップロードする必要があります。その後、以下のようなコマンドを実行します。

  mysql -u user -p password database < filename..sql
「いいね!」 3

行き詰まっています :frowning:

「いいね!」 1

このガイドは、ローカル開発マシンではなく Docker 環境内でインポートを実行できるように更新する必要があります。

「いいね!」 5

Docker ベースの環境でガイドを実行できることを心から楽しみにしています :slight_smile:

「いいね!」 2

最終的にはDIYを断念し、開発者に依頼しました。このフォーラムの素晴らしい提案(非常に役立ちました)をすべて彼に紹介しました。彼は私のライブのDigital Oceanドロップレット上で直接作業を行ったと聞いています(別の開発環境ではなく、彼が作業している間も簡単に確認できるようにするためです。ユーザーには影響はありませんでした。フォーラムはまだ正式に公開されていなかったため)。つまり、これは可能だと考えています。\n\n数回の試行の後、結果は非常に良好です。MyCodeや特殊文字の問題はすべて解決され、MyBBの投稿プレフィックスはDiscourseのタグに変換され、カスタムのマルチセレクトユーザープロフィールフィールドも正常にインポートされました。\n\n彼が許可してくれるなら、標準的なインポートスクリプトへの修正や、ここで使用された他の技術について共有してもらうよう依頼するつもりです。

「いいね!」 4

参考になれば幸いです。私が依頼した開発者 @rahilqf は、カスタム MyBB ユーザーフィールドを Discourse のカスタムユーザーフィールドへ変換する作業(multi-select-user-field プラグインのインストールが必要)を含むプロジェクトを完了しました。また、MyBB の投稿プレフィックスを Discourse のタグへ変換し、MyBB の投稿テキストからほぼすべての冗長な MyCode タグを除去しました。

彼がカスタマイズしたインポートスクリプトのバージョンはこちらで共有されています - カスタム MyBB から Discourse へのインポートスクリプト

さらに、標準的なYahoo 用インポートスクリプトを使用して、Yahoo Groups の Mbox アーカイブの取り込みにも成功しました。ただし、この際添付ファイルの変換は行われませんでした。私の場合、それは大きな問題ではありませんでした。

「いいね!」 3

MyBBデータベースからユーザー、投稿、トピックなどを移行しています!

このガイドに従いました:Install Discourse on Ubuntu or Debian for Development

しかし、http://localhost:3000/ または http://forum.omaggieconcorsi.com:3000/ が動作しません。

とにかく、プログラムは何らかの変換を行っていますが、データをどこからエクスポートすればよいのか分かりません。
Discourseがhttp://forum.omaggieconcorsi.com:3000/http://localhost:3000/から見当たらないので、少なくとも古いMyBBフォーラムから投稿やユーザーなどのデータベースをエクスポートし、それを新しいDiscourseインスタンスにインポートするにはどうすればよいでしょうか?

よろしくお願いします!

Web ブラウザを実行しているのと同じコンピュータで、その手順に従いましたか?

「いいね!」 1

はい、いつも同じパソコンです

はい、Ubuntu 18.04 の「実機」PC にインストールして、localhost:3000 が動作しています!

ただし、データベースの MySQL で問題が発生しました :frowning: すみません…

以下を入力しました:

debby@debby-MS-7721: mysql -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

:frowning:

編集:root にパスワードを設定しました。ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

そして DB_PW には root ユーザーのパスワードを入力しました。

… これでユーザー作成が始まりました!!

私のために祈ってください。数週間のテストを経て、ついに正解でしょうか?

「いいね!」 1

MyBB から Discourse へデータベースをインポートしようとしています。@Paul_King と同じく、DigitalOcean サーバーで動作させることができません。このガイドに従うと、あらゆる種類のエラーが発生し続けます。

次のコマンドを実行するところでつまずいています。

$ bundle exec rails db:drop
bundler: コマンドが見つかりません: rails
不足している gem の実行ファイルは `bundle install` でインストールしてください

bundle install は完了したと表示されます。

$ bundle install
Gemfile に gem mysql2 (>= 0) が複数回記載されています。
1 つだけ残すことをお勧めします。
現時点では問題ありませんが、後でいずれかのバージョンを変更するとエラーが発生する可能性があります。
bundler 1.16.1 を使用しています
mysql2 0.4.10 を使用しています
Bundle 完了!2 つの Gemfile 依存関係、2 つの gem がインストールされました。
`bundle info [gemname]` でバンドルされた gem のインストール場所を確認できます。

Rails を手動でインストールしようとすると、以下のようなエラーになります。

$ gem install rails
ネイティブ拡張をビルドしています。時間がかかる場合があります...
ERROR: rails のインストールエラー:
        ERROR: gem のネイティブ拡張のビルドに失敗しました。

    現在のディレクトリ: /var/lib/gems/2.5.0/gems/racc-1.5.2/ext/racc/cparse
/usr/bin/ruby2.5 -r ./siteconf20210110-8155-1ms05r3.rb extconf.rb
mkmf.rb が /usr/lib/ruby/include/ruby.h の Ruby のヘッダーファイルを見つけられません

extconf が失敗しました。終了コード 1

Gem ファイルは点検のために /var/lib/gems/2.5.0/gems/racc-1.5.2 に残ります。
結果は /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/racc-1.5.2/gem_make.out に記録されました。

非常に腹が立ちます。


この投稿を放置したまま、Rails のインストールに成功しました。その後、無数の他のエラーが発生しましたが、それらも修正できました。エラーが、各、単一の、ステップで発生します。

ソフトウェアに対してこれほど純粋な嫌悪を感じたことはこれまでありません。なぜ Ruby はこうなのでしょうか?これは悪夢です。現在は次のエラーでつまずいています。

$ bundle exec rails db:drop
トレースバック(最後から最初へ):
        1: from /usr/local/bin/bundle:23:in `\u003cmain\u003e'
/usr/local/bin/bundle:23:in `load': 以下のファイルを読み込めません -- /usr/share/rubygems-integration/all/gems/bundler-1.16.1/exe/bundle (LoadError)

どなたか助けていただけますか?

「いいね!」 1

役に立たなかったのですが、ローカル開発環境(Discourse のデータベースファイル/バックアップを生成するため)でのセットアップ時と、Digital Ocean の Droplet 上での直接セットアップ時、どちらも同様の行き詰まりに直面しました。結局、数十時間を無駄にした後、人生は短いと悟り、Fiverr の開発者に依頼しました(彼は何週間もかかって解決しましたが、最終的には達成しました)。
誰かがこのプロセスを容易にする動機が欠如しているのではないかと疑っています。

幸運を祈ります。もし最終的に解決された場合は、他の人がたどれるよう、ここに手掛かりを残していただければ幸いです!

「いいね!」 1

Rails はどのようにインストールしましたか?開発ガイドのいずれか(例えば、Ubuntu での Discourse 開発環境構築のための初心者向けガイド)を利用しましたか?

本番コンテナ内でインストールスクリプトを実行する方法について、いくつかのハウツー文書があります(私は通常これを行っています)。これらのいずれかをガイドとして活用できるかもしれません。