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

素晴らしい!私の古い SMF がきれいな URL を使っていなくてもですか?

「あまりそうでもない」とはどういう意味ですか?

ご質問への回答:

  1. はい、ただし…
  2. 完全にではありません。トピック ID へのリンク(例:index.php?topic=123)はパーマリンクとして作成され機能しますが、特定の投稿へのアンカー(例:index.php?topic=123.msg789#msg789)は保持されず、機能しなくなります。これらはトピック ID に短縮されます。

以下は、SMF2 からインポートした私のフォーラムからのパーマリンクの例です。

image

「いいね!」 2

少なくともトピックは特定の投稿への参照として残ります。それで十分です。素晴らしいです。返信してくださったこと、そしてこれらの指示をまとめてくださったこと、心から感謝いたします。

「いいね!」 1

すみません、聞くのを忘れていたのですが、SMF の構造がカテゴリ→掲示板→サブ掲示板になっている場合、Discourse への正常な変換のために、まず「カテゴリ」を削除して、2 層(フォーラム→サブフォーラム)の構造にする必要がありますか?

@marcozambi さん、こんにちは。

どのようにしてこれを機能させたのか興味があります。私は 10 月 19 日にインポーターを使用して、SMF から Discourse へ大規模なフォーラムを移行しましたが、旧形式のリンクはほぼ失われてしまいました(つまり、古い URL を使用すると 404 エラーが表示されます)。

例えば、以下の旧リンク:

は、次のトピックを指していました:

あなたの「魔法」を共有していただけませんか?:grin:

特別な魔法はありません。2018 年 9 月に SMF からインポートを行った際、SMF2 インポートスクリプトがすべての処理を自動で行いました。各投稿をインポートした後、スクリプトは関連するパーマリンクを自動的に作成しました。いずれにせよ、このトピックの最初の投稿で詳述したように、スクリプトにいくつかの minor なカスタマイズを施しました。

「いいね!」 1

その通りです。既存の SMF サブフォーラムツリーを 2 階層に「平坦化」する必要があります。

「いいね!」 1

はい、素晴らしい投稿をありがとうございます。その手順を丁寧に追って、600 万件の投稿を持つフォーラムの移行に成功しました。

ただし、パーマリンクは実際には作成されているかもしれません。確認方法はありますか?もしデータベース内に存在するならば、修正すべきは単に Nginx の設定の問題かもしれません。

パーマリンクのリストは、管理画面 → カスタマイズ → パーマリンク に移動して確認できます。
必要に応じて、そこから新しいパーマリンクを作成することも可能です。

「いいね!」 1

:+1:

予想通り、空でした。つまり、スクリプトの一部が私たちの環境では動作しなかったということです。:expressionless: まあ、いくつかは手動で構築できます(試しに上記の例で成功しました)。

この手順では、古い SMF2 データベースの詳細を入力するのでしょうか、それとも「user」「pass」「db」という文字列をそのまま指定するべきなのでしょうか?

この手順でも、古い SMF2 データベースの詳細を入力するのでしょうか、それとも指定された通り「db」「user」「pass」とするべきなのでしょうか?

元の古い SMF2 データベースの詳細を使用するのは、この手順だけでしょうか?

これらは、SMF フォーラムのデータベースダンプがインポートされている Docker 化された MySQL インスタンスに接続するための認証情報です。
はっきりさせておくと、Docker 化された MySQL は Discourse が動作しているのと同じサーバー上で実行されており、SMF データベースから取得したダンプを保持するためだけに必要です。

これは、SMF 2 の元のデータベースをホストしているサーバーで実行してダンプを取得するためのコマンドです。取得したダンプは、前述の Docker 化された MySQL インスタンスにインポートする必要があります。

「いいね!」 1

ご返信ありがとうございます。

はい、すでに元の smf2 データベースを、Docker 化された MySQL インスタンス内の Discourse サーバーにインポートしました。

Settings.php に Docker 化された MySQL の情報を入力してインポートスクリプトを実行すると、以下のエラーが発生します。

既存のグループを読み込んでいます…

既存のユーザーを読み込んでいます…

既存のカテゴリを読み込んでいます…

既存の投稿を読み込んでいます…

既存のトピックを読み込んでいます…

グループを作成中

バックトレース(最も最近の呼び出し順):

11: from script/import_scripts/smf2.rb:701:in `’

10: from script/import_scripts/smf2.rb:28:in `run’

9: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform’

8: from script/import_scripts/smf2.rb:66:in `execute’

7: from script/import_scripts/smf2.rb:77:in `import_groups’

6: from script/import_scripts/smf2.rb:281:in `query’

5: from script/import_scripts/smf2.rb:287:in `__query’

4: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22:in `query’

3: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query’

2: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt’

1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query’

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query’: Table ‘db.smf_membergroups’ doesn’t exist ( Mysql2::Error )

ご教示いただけないでしょうか?

このガイドを数回にわたり一字一句忠実に従って実行しましたが、毎回この段階でつまずいています。

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

MySQL データベースで smf_membergroups テーブルが存在するか確認してください。存在しない場合は、以下のいずれかを行ってください。

  1. スクリプトを変更して異なるテーブル名に対応させるか、
  2. グループが存在しない場合はインポートをスキップしてください。
「いいね!」 2

ファイル拡張子は最終的には問題になりません。ファイルに有効なSQL文が含まれていれば、拡張子に関係なく読み込まれます。

「いいね!」 1

また、データベースのプレフィックスが smf_ と異なる場合が一般的です。多くのインポーターにはそのオプションがありますが、このインポーターについては確認していません。

「いいね!」 2

smf2 データベースと同じ認証情報を Docker 化された MySQL インスタンスで使用することで、私の問題は解決しました。皆さん、ありがとう!

「いいね!」 1

@Paracelsus 私も同じ状況のようです。パーマリンクが空になっています。:frowning:

私の SMF2 はルートドメインで動作し、Discourse は SMF2 のルートドメインのサブドメインで動作しています。これは問題になりますか?

うん…パーマリンクは本当に厄介だけど、慣れてきたよ。古いSMF形式のリンクが貼られたウェブページをGoogleで探しまくって、そのページからテキストやパラグラフをコピーし、Discourseフォーラム内で検索して、パーマリンクに置き換えたんだ。もしまだSMFフォーラムが稼働しているなら、今すぐやっておくことをおすすめする。なぜなら、ウェブページに貼られたリンクには引用やテキストが付いておらず、URLだけの場合もあるからだ。それでも正しいトピックを見つけられるから。

僕たちの場合は、最初は discourse.forumscp.com を使い、本番フォーラムとして SMF の forumscp.com をしばらく併用していた(Discourseでのテストや慣れのために)。増分更新のプロセスは何度も試し、移行の数週間前にも確認して、移行がスムーズに進むようにした。移行当日には古いフォーラムをオフラインにし、SMFからDiscourseへの最後の増分データベース更新を行い、その後、ここら辺に載っている手順に従ってドメインを変更した。また、ホスティング会社にも頼んでnginxの設定を確認してもらった。DNSの設定で何か変更が必要だったと思うけど、正確なことは覚えていない。とにかくホストの指示に従って進めたら、全て問題なく終わったよ。

パーマリンクに対応する別のインポーターを探して、コードをコピーすることもできます。vBulletin と phpBB が良い例でしょう。