将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 个赞

我使用的是 v2.50 beta2,这是 SMF v2.0.17 的最新版本。由于当前的 templates/import/mysql-dep.template.yml 文件,生成的 smf2.rb 有所不同。

正如第 4 步中解释的,将 “quote =” 替换为当前迭代的内容:

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

此外,以下内容也不存在:

不过,我还是继续执行了导入操作,但不幸的是,它因 “IGNORE_BBCODE 是否指 IgnoreUser” 而终止。
抱歉,我本应截取回溯(Traceback)的屏幕截图,但当时没有。无论如何,这就是我的记忆。
有什么建议吗?
谢谢。

我最近更新了此脚本。我会看一下。

1 个赞

非常感谢!请问如果我重新开始,会覆盖我已经导入的内容吗?例如用户、分类等。
祝好!
G。

通常不会。导入脚本足够智能,会记住您上次中断的位置!

1 个赞

@tradenet 现在应该已经在这里修复了:

对此表示歉意!

一旦所有检查完成,它将在 tests-passed 中提供。

3 个赞

感谢您的关注。
G.

2 个赞

将 SMF 转换为 Discourse 后,旧的 SMF 链接会失效吗?

并非如此。导入器将创建与旧 URL 匹配的重定向永久链接,将其指向新路径。