Migrer un forum SMF2 vers Discourse

Peut-être ouvrir un ticket auprès de Duffield Ocean concernant les caractères incorrects ?

Vous pouvez utiliser un client SSH comme PuTTY ou le nouveau shell qui fait partie, je crois, du sous-système Linux pour Windows (la dernière version de Windows que j’ai utilisée avait une année comme descripteur de version, donc je ne peux pas vous aider beaucoup). Si vous utilisez un Mac, ouvrez simplement un terminal et utilisez ssh.

Si votre base de données est volumineuse, le chargement prendra un certain temps et il n’y aura aucune sortie, sauf une nouvelle invite une fois terminé. Je pense que cela fonctionnait correctement.

2 « J'aime »

Merci @pfaffman. Je pense que je vais les contacter à ce sujet.

Je peux essayer un autre client SSH et voir si cela fonctionne mieux.

La base de données n’est pas très volumineuse. Elle est en attente depuis une heure maintenant et n’a toujours pas bougé. J’ai vérifié le CPU du serveur et il est essentiellement inactif.

1 « J'aime »

Oui, c’était bien le problème ! Merci encore @pfaffman. On reprend de l’avance…

Une autre solution consiste à autoriser l’accès direct à la base de données depuis le droplet effectuant l’importation, évitant ainsi l’étape consistant à disposer d’une base de données locale.

Si une heure s’est écoulée, il est probable que cela ne se produise pas. Vous pouvez essayer quelque chose comme :

 cat database.sql | mysql
1 « J'aime »

Un pas en avant, un pas en arrière.

Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "La variable d'environnement LETSENCRYPT_ACCOUNT_EMAIL est requise et n'a pas été définie."; exit 1; fi a échoué avec le statut de retour #<Process::Status: pid 1187 exit 1>

Je n’avais pas installé Let’s Encrypt, alors je l’ai installé.

Ce qui manque dans « Préparation de l’hôte Discourse et du conteneur pour l’importation », c’est qu’il faut décommenter la ligne d’environnement pour LETSENCRYPT_ACCOUNT_EMAIL et saisir votre adresse e-mail. Cela m’a permis de passer outre cette erreur.

Dans la continuité, je suis maintenant à l’étape finale d’importation. J’entre dans le conteneur d’importation et j’exécute le script d’importation. Il se termine immédiatement avec :

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)

De nombreuses recherches sur le web, mais sans succès jusqu’à présent.

EDIT : Je pense que cela vient du fait que MySQL n’est pas installé dans le conteneur. J’ai essayé gem install mysql2, mais cela renvoie :

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

EDIT 2 :
J’ai finalement réussi à installer mysql2. D’abord, j’ai dû installer les outils de développement, mais la source suggérée n’était pas disponible. J’ai donc exécuté :

sudo apt-get install default-libmysqlclient-dev

Ensuite, j’ai pu faire :

gem install mysql2

Cependant, j’ai toujours obtenu la même erreur. J’ai donc essayé de commenter cette instruction require dans le script pour voir ce qui se passerait. J’ai obtenu une nouvelle erreur :

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)

La recherche sur cette erreur renvoie un ancien bug Ruby, mais il a été corrigé il y a longtemps, donc je suis à nouveau bloqué.

Allez dans smf2.rb et changez la chaîne figée de true à false ou l’inverse, cela se trouve sur la première ou la deuxième ligne. Cela fonctionnera après cela.

2 « J'aime »

Merci @Paracelsus ! Cela a résolu le problème. J’ai changé la valeur de true à false.

Un pas de plus !

EDIT :
J’avais une erreur étrange qui semblait pointer vers la mauvaise adresse IP. En réalité, j’avais le mauvais mot de passe dans Settings.php. C’est maintenant corrigé.

Maintenant, je cherche à comprendre :

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)

Je suppose que cette ligne dans le fichier de réglages du script vise à résoudre ce problème :

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

Faut-il l’ajouter quelque part à l’intérieur du conteneur d’importation ?

D’accord, j’ai résolu le problème ci-dessus. Il s’agit d’un problème avec la dernière version de MySQL, qui ne prend plus en charge les mots de passe natifs plus anciens. La façon la plus simple de régler cela est d’exécuter ce processus avec MySQL 5.7. Il suffit de modifier l’étape 3 de :

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

à

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

et tout devrait fonctionner parfaitement. Mon import est enfin en cours d’exécution.

2 « J'aime »

Une nouvelle question : je n’arrive pas à importer les avatars des utilisateurs. Est-ce censé être comme ça ?

J’ai ceux qui doivent être redimensionnés dans un dossier personnalisé au lieu du dossier standard de SMF. Est-ce que cela pourrait être la raison ?

Sinon, jusqu’ici tout va bien. Ce guide est excellent et les importations incrémentielles de la base de données fonctionnent très bien aussi :+1:.

2 « J'aime »

Les nôtres ont été transférés sans aucune étape supplémentaire. Je ne sais pas exactement où SMF stocke les avatars. Avez-vous transféré vos pièces jointes ? J’ai uniquement importé notre base de données SQL et les pièces jointes, donc je suppose qu’elles s’y trouvent.

Oui, ils étaient là, mais j’avais déplacé les avatars vers un autre dossier et oublié de les copier dans le dossier d’avatars que l’importation utilise pour les associer à l’utilisateur. Problème résolu (même si j’ai dû refaire l’importation).

Un nouveau problème maintenant… les utilisateurs bannis n’apparaissent pas comme suspendus lors de l’importation, mais simplement comme désactivés. Des idées pour les faire apparaître comme suspendus ?

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.