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

Maybe open a ticket with Duffield ocean about the characters being wrong?

You might use an ssh client like putty or the new shell that I think is part of Linux subsystem for windows (the last version of windows that I used had a year as it’s version descriptor, so I’m no help). If you use a Mac just open a terminal and use ssh.

If your database is big it will take a while for the database to load and there will be no output except a new prompt when it’s done. My guess is that it was working properly.

「いいね!」 2

Thanks @pfaffman. I think I will reach out to them about that.

I can try a different ssh client and see if that works better.

The database isn’t that large. It has been sitting for an hour now and still in the same spot. I checked the CPU on the server and it is essentially idling.

「いいね!」 1

Yep, that was the issue! Thanks again @pfaffman. Making progress again…

Another solution is to allow access to the database directly from the droplet doing the import,thereby skipping the step of having a local database.

If it’s been an hour then it’s likely its not happening. You might try something like

 cat database.sql | mysql
「いいね!」 1

One step forward, one step back.

Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "LETSENCRYPT_ACCOUNT_EMAIL ENV variable is required and has not been set."; exit 1; fi failed with return #<Process::Status: pid 1187 exit 1>

I did not have letsencrypt installed, so I installed it.

What’s missing from “Preparing the the Discourse Host and container for importing” is that you need to uncomment the env line for LETSENCRYPT_ACCOUNT_EMAIL and enter your email address. That got me past this error.

In a continuation, now I’m at the final import step. I enter the import container and run the import script. It immediately quits with:

Traceback (most recent call last):
        1: from script/import_scripts/smf2.rb:4:in `<main>'
script/import_scripts/smf2.rb:4:in `require': cannot load such file -- mysql2 (LoadError)

Lots of web searches, but coming up empty so far.

EDIT: I think this might be that mysql is not installed in the container. I’ve tried ‘gem install mysql2’, but that kicks back

mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.

EDIT 2:
So I managed to get mysql2 installed. First I had to get the dev tools installed, but the suggested source wasn’t available. So I ran

sudo apt-get install default-libmysqlclient-dev

From there I was able to

gem install mysql2

I still got the same error. So I tried commenting out that require in the script just to see what would happen. Got a new error:

Traceback (most recent call last):
        6: from script/import_scripts/smf2.rb:627:in `<main>'
        5: from script/import_scripts/smf2.rb:19:in `run'
        4: from script/import_scripts/smf2.rb:447:in `parse!'
        3: from script/import_scripts/smf2.rb:502:in `parser'
        2: from script/import_scripts/smf2.rb:502:in `new'
        1: from /usr/local/lib/ruby/2.6.0/optparse.rb:1089:in `initialize'
script/import_scripts/smf2.rb:504:in `block in parser': can't modify frozen String (FrozenError)

Researching that comes back with an old Ruby bug, but it was fixed a long while back so I’m stuck again.

Go to smf2.rb and change the Frozen string from true to false or the other way around, it’s on the first or second line. It will work after that.

「いいね!」 2

Thank you @Paracelsus! That fixed it. I changed it from true to false.

One step closer!

EDIT:
I had an error that was odd and seemed to be pointing to the wrong IP. It was that I had the wrong password in the Settings.php. That’s fixed.

Now figuring out:

Traceback (most recent call last):
        7: from script/import_scripts/smf2.rb:627: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.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (Mysql2::Error::ConnectionError)

I’m assuming this line in the script tuning file is to address this:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

Should that be added somewhere inside the import container?

Alright, I figured out the above issue. This is a problem with the latest version of MySQL. It doesn’t support the older native passwords anymore. The easiest way to tackle this is to run this process using MySQL 5.7. Just change step 3 from:

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql

to

docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql:5.7

and you should be golden. My import is finally running.

「いいね!」 2

A new question: I can’t seem to get the user avatars imported. Is it supposed to be like this?

I have the ones that need redimension being saved on a custom folder instead of the standard one in SMF, could this be the reason?

Otherwise, so far so good. This guide is great and the incremental database imports work great too :+1:.

「いいね!」 2

Ours came over without any extra steps. I’m not sure where SMF stores avatars off-hand. Have you brought over your attachments? I only imported our SQL DB and attachments, so my guess is they are in there.

Yes, they were there, but I had the avatars moved to another folder and forgot to copy it to the avatar folder that the import uses to match with the user. Problem solved (even if I had to remake the import).

A new issue now… banned users don’t appear as suspended when imported, just as inactivated. Any ideas on how to get them suspended instead?

「いいね!」 1

最新の SMF v2.0.17 の v2.50 beta2 を使用していますが、現在の templates/import/mysql-dep.template.yml の影響により、生成される smf2.rb が異なります。

ステップ 4 で説明されているように、「quote =」を現在の反復処理に置き換えると以下のようになります:

quote = +“\n[quote="#{params[‘author’]}”

さらに、以下のような記述はありません:

それでも、インポートを実行しましたが、エラー「IGNORE_BBCODE のことですか?IgnoreUser を意味しますか」で停止してしまいました。
申し訳ありませんが、トレースバックのスクリーンショットを撮るべきでした。しかし、私の記憶では上記の通りです。
何かご存知でしょうか?
ありがとうございます。

最近、このスクリプトを更新しました。確認します。

「いいね!」 1

どうもありがとうございます!もし最初からやり直す場合、すでにインポートしたデータ(ユーザーやカテゴリなど)は上書きされてしまいますか?
よろしくお願いいたします!
G.

一般的にはいいえです。インポートスクリプトは、中断した場所から再開するよう巧妙に設計されています!

「いいね!」 1

@tradenet はここで修正されました:

ご迷惑をおかけして申し訳ありません!

すべてのチェックが完了次第、tests-passed で利用可能になります。

「いいね!」 3

ご丁寧にお気遣いいただき、ありがとうございます。
G.

「いいね!」 2

SMF の古い URL は Discourse へ移行した後にリンク切れになりますか?

いいえ、インポーターは旧URLと一致するパーマリンクを作成し、それらを新しいパスにリダイレクトします。