Migrer un forum SMF2 vers 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 « J'aime »

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 « J'aime »

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 « J'aime »

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 « J'aime »

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 « J'aime »

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 « J'aime »

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 « J'aime »

J’utilise la dernière version v2.50 beta2 de SMF v2.0.17 et un fichier smf2.rb différent est généré en raison de l’élément actuel :

templates/import/mysql-dep.template.yml

Comme expliqué à l’étape 4, en remplaçant « quote = », l’itération actuelle est :

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

Et plus loin, il n’y a pas :

Cependant, j’ai quand même procédé à l’importation, mais cela a échoué avec le message « IGNORE_BBCODE voulez-vous dire IgnoreUser. ».
Désolé, j’aurais dû faire une capture d’écran de la trace d’erreur (Traceback), mais je ne l’ai pas fait ; en tout cas, c’est ce dont je me souviens.
Avez-vous des idées ?
Merci.

J’ai récemment mis à jour ce script. Je vais jeter un coup d’œil.

1 « J'aime »

Merci beaucoup ! Une question : si je recommence à zéro, cela écrasera-t-il ce que j’ai déjà importé ? Par exemple, les utilisateurs, les catégories.
Salutations !
G.

Généralement non. Les scripts d’importation sont assez intelligents pour reprendre là où vous vous êtes arrêté !

1 « J'aime »

@tradenet devrait être corrigé maintenant ici :

Désolé pour cela !

Serait disponible dans tests-passed dès que tous les contrôles seront terminés.

3 « J'aime »

Je vous remercie de votre aimable attention.
G.

2 « J'aime »

Les anciennes URL de SMF seront-elles cassées après la conversion vers Discourse ?

Pas vraiment. L’importateur créera des permaliens qui correspondent (et redirigeront) les anciennes URL vers leurs nouveaux chemins.