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

再度返信して申し訳ありません。パーマリンクが作成されない理由がわかりません。:frowning:

まとめますと:
SMF2 のデフォルトの「醜い URL」を、ルートドメインのトップレベルで使用しています。Discourse はそのルートドメインのサブドメインにインストールされています。最新の Discourse リポジトリにある smf2.rb インポーターを使用して(あなたのガイドに従って)SMF2 から Discourse への変換を行いましたが、インポート完了後、Discourse にはパーマリンクが存在しません。

SMF2 または Discourse 上で特定の設定やプラグインを実行するなど、追加のステップが必要でしょうか?

その関数はきれいなURL用のもののようですが?したがって、それに合わせて変更する必要があります(コードを見落としていなければの話ですが)。

「いいね!」 1

少し混乱しています。Marco は「きれいな URL」を使用しませんでしたが、彼のためにパーマリンクが作成され、同じインポートスクリプトを使用していました。

インポートスクリプト内の「きれいな URL」関数はこちらです:discourse/script/import_scripts/smf2.rb at main · discourse/discourse · GitHub

SMF のデフォルトの「汚い」URL で動作させるためのサポートを求めています。何かヒントがあれば大変助かります。:folded_hands: ありがとうございます。

わかりません。しかし、私の最善の推測としては、あなたが確認したいのは、以下の行 222 です。

           Permalink.find_or_create_by(url: "forums/index.php/board,#{c["id_board"]}.0.html", category_id: category.id)

そのパーマリンク(あるいは他にもいくつかあるかもしれません)を、見苦しいものと同じ形式に変更する必要があるでしょう。ただ、私から見てもそれはかなり見苦しく見えます。また、ファイルの先頭にある permalink_normalizations を調整する必要があるかもしれません。

Jay さん、また返信して申し訳ありません。222 行目はどこでしょうか?smf2.rb の 222 行目は以下の通りです:

if parent

さて、私たちが参照しているバージョンが異なるようですね。その理由はよくわかりませんが、確認すべき点は「Permalink」に関する行です。

リンクしたバージョンが最新の「公式」バージョンに見えるので混乱しています。しかし、あなたは2人目に異なるバージョンを参照する人です。何が抜けているのでしょうか?あなたのバージョンはどこで入手できますか?

ああ、すみません。どうやら smf1 スクリプトをクリックしてしまったようです。ご覧の smf2.rb と同じ場所に smf1.rb1 があるので、そちらを確認してください。

smf1 スクリプトを確認するか、make_prettyurl_permalinks をモデルとして make_uglyurl_permalinks を作成することもできます。ただし、これは綺麗な URL テーブルから読み取るため、smf1.rb をモデルにする方が簡単かもしれません。確実なことはデータベースを確認しないとわかりません。いや、create_xxx 関数を変更しない限り、それでもあまり役立たないでしょう。

申し訳ありませんが、ここで説明できるような解決策は見当たりません。

「いいね!」 1

ここまで進んできたのですが、どうやらそれ以上先に進めません。MySQL サーバーにネイティブパスワード付きの新しいユーザーを作成して試してみましたが、やはり解決しませんでした。

su discourse -c "bundle exec ruby script/import_scripts/smf2.rb /shared/smf2 -t UTC"
既存のグループを読み込み中...
既存のユーザーを読み込み中...
既存のカテゴリを読み込み中...
既存の投稿を読み込み中...
既存のトピックを読み込み中...
Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:701:in `<main>'
        6: from script/import_scripts/smf2.rb:28:in `run'
        5: from script/import_scripts/smf2.rb:28:in `new'
        4: from script/import_scripts/smf2.rb:62:in `initialize'
        3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
        2: from script/import_scripts/smf2.rb:274:in `new'
        1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': RSA Encryption not supported - caching_sha2_password plugin was built with GnuTLS support (Mysql2::Error)

OK、何時間もやり取りを繰り返してようやく動作させることができたので、同じように詰まってしまう人のために問題を特定し、ここに投稿します。

MySQL の Docker コンテナはバージョン 8 です。そのため、何らかの理由で MySQL テンプレートが依存する MariaDB ライブラリが機能しません。

インポート用 Docker コンテナの設定ファイルには MySQL テンプレートファイルを含めていませんでした。これが最初の修正点です。

インポート用コンテナをビルドし、./launcher enter import でその中に入りました。

その後:

echo "gem 'mysql2'" >> Gemfile
wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb
dpkg -i mysql-apt-config_0.8.17-1_all.deb

対話式プロンプトが表示されますが、デフォルト設定(MySQL 8 とツール)を選択できます。

その後、通常の MySQL 8 ライブラリをインストールしてビルドを続行しました:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libmysqlclient-dev
su discourse -c 'bundle config unset deployment'
su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'

これで全て完了し、残りの手順は同じでした。インポートが現在実行されています。

Discourse 開発者たちは、この問題に対処するためにインポートスクリプトを調整したいと思うかもしれません。少なくとも、同じように詰まってしまう人が見られるようにフォーラムに投稿されました。

「いいね!」 3
  1. この手順に従って破棄すればよいでしょうか?how-to-migrate-import-from-smf2-to-discourse/90129#cleanup-5

  2. インポート前に、手動で smf2 の添付ファイルディレクトリを Discourse へ移動し、その後インポーターを一度実行しましたが、Discourse の投稿にアップロードファイルが表示されません。原因は考えられますか?

  3. S3 を有効化せずにインポーターを一度実行してしまいましたが、S3 を使用したいと考えています。どうすればよいでしょうか?

  1. はい
  2. Hmm… S3 を有効化して、再インポートを試みてください。
  3. インポートを開始する前に S3 を有効にしてください。
「いいね!」 1

S3 を使用せずに一度インポーターを実行しました。すでにインポート済みのトピックからのアップロードは、デルタインポート中に S3 に転送されますか?

最初からやり直し、インポートする前に S3 を有効にすることをお勧めします。

ユーザー作成時に以下のエラーが発生します:

oxipng worker: oxipngnot found; please provide proper binary or disable this worker (--no-oxipng argument or:oxipng => false through options)

その後、投稿の作成が始まります。

  • これが Discourse で添付ファイルが表示されない原因でしょうか?
  • oxipng はどこにインストールすべきですか?

更新:なぜ oxipng のエラーが発生しているのか混乱しています。Discourse 内でこれに関する情報を全く見つけることができず、この問題は SMF2 インポートスクリプトを実行した時のみ発生しています。もしかして、これと関連があるのでしょうか?https://meta.discourse.org/t/faster-and-smaller-uploads-in-discourse-with-rust-webassembly-and-mozjpeg-blog

それはサーバー側で使用している画像最適化ライブラリからの警告に過ぎず、何もブロックするものではありません。

「いいね!」 2

当初はインポートの問題が S3 の問題に関連している可能性があると考えていましたが、S3 は正常に動作していることがわかりました。私が直面している問題は、インポートスクリプトを実行(S3 有効化)し、インポートコンテナを再構築した後、Discourse のすべてのトピックに、smf2 トピックの添付ファイルとして存在するアップロードが含まれていないように見える点です。つまり、Discourse のトピックにはアップロードが存在することを示す視覚的な手がかりがなく、これは smf2 の対応するトピックでは明確に添付ファイルとして表示されているはずです。S3 を無効にしてインポートした場合でも同じ結果になります。手がかりが尽きてしまいました :confused: ご意見をお聞かせください。

画像が投稿に添付されているため、インポートスクリプトはそれらをインポートする必要があると認識していますが、投稿内で参照されていないため表示されない可能性があります。画像へのリンクを含めるように投稿テキストを変更する必要があります。以前、別のフォーラムで同様の事例を目にしたことがあります。

smf2 で投稿を編集して、Discourse にインポートする前に添付ファイルへのリンクを含めるという意味ですか?

それは一つの手段かもしれません。

ただ、インポートスクリプトを修正して、添付ファイルを生の投稿に追記したいと考えています。例えば、以下のような形です。