Migration d'un forum myBB vers Discourse en utilisant Kubuntu dans une VM

Après avoir passé beaucoup trop d’heures, j’ai pensé que j’étais proche, mais ensuite…

$ bundle exec ruby script/import_scripts/mybb.rb 
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

creating users
script/import_scripts/mybb.rb:96:in `block (3 levels) in import_users': undefined method `exists?' for File:Class (NoMethodError)

                  @uploader.create_avatar(newuser, filename) if File.exists?(filename)
                                                                    ^^^^^^^
Did you mean?  exist?

toujours pas de fumée :frowning:

1 « J'aime »

Si j’ai bien compris, la méthode a été dépréciée puis supprimée des versions actuelles de Ruby :

Le script d’importation devrait être mis à jour pour refléter ce changement.


Peut-être essayer de remplacer exists par exist sans le “s” ici :

:slight_smile:

Documentation Ruby : class File - RDoc Documentation

1 « J'aime »

Ouais - il a été déprécié depuis des lustres avant cela. J’essaierai de rechercher les occurrences pertinentes et de les modifier, mais je dois faire une pause dans cet exercice long et jusqu’à présent peu gratifiant :wink:

Eh bien…

$ bundle exec ruby script/import_scripts/mybb.rb
Chargement des groupes existants...
Chargement des utilisateurs existants...
Chargement des catégories existantes...
Chargement des publications existantes...
Chargement des sujets existants...
/home/silverdr/sources/discourse/lib/site_setting_extension.rb:444:in `get': Aucun paramètre nommé 'email_domains_blacklist' n'existe (Discourse::InvalidParameters)

Vous pouvez trouver le nouveau nom dans les paramètres du site. Je pense que c’est email_domains_blocklist

Merci.

$ grep -R email_domains_blocklist ./\n```
ne retourne rien

$ grep -R email_domains_blacklist ./\n./script/import_scripts/base.rb: email_domains_blacklist: ‘’,\n./app/models/site_setting.rb: email_domains_blacklist: "blocked_email_domains",\n```
retourne comme ci-dessus. Ce qui signifie qu’il s’agit très probablement de blocked_email_domains. D’un autre côté, j’ai remarqué que lors de tentatives précédentes, j’avais remplacé le script/import_scripts/base.rb original par celui basé sur le gist lié ci-dessus par @Paul_King :

Je l’ai restauré à l’original et il semble que cela ait fonctionné cette fois-ci. Trop beau pour être vrai. J’ai/Il a dû manquer quelque chose :wink: Je vais le découvrir maintenant.

2 « J'aime »

Résumé du parcours (beaucoup plus long que ce post) :wink: :

NOTE : J’ai utilisé une distribution Kubuntu fonctionnant dans une machine virtuelle pour le processus, veuillez donc garder à l’esprit que cela peut ne pas être la même chose sur différents systèmes d’exploitation ou même distributions.

0. Installation de l’environnement de développement Discourse

En suivant ce post et en exécutant ce script lié dans le post en utilisant

`bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)`

comme décrit là-bas, plus le clonage des sources

git clone https://github.com/discourse/discourse.git ~/discourse

1. Préparation de la base de données MySQL

Obtenez un dump de la base de données mybb d’origine comme décrit en haut du fil :

$ mysqldump -u NOM_UTILISATEUR -p NOM_BASE_DE_DONNEES > mybb_dump.sql

et copiez/déplacez-le dans l’environnement de développement nouvellement configuré.

Installer le serveur MySQL

$ sudo apt-get install mysql-server

L’authentification pour mysql a changé dans les versions plus récentes. Vous devez être root sur l’hôte si vous voulez être root sur mysql ces jours-ci, donc

$ sudo mysql

au lieu de

$mysql -u root

Bien sûr, vous devez d’abord être un “sudoer” (administrateur).

$ sudo mysql
mysql> CREATE DATABASE mybb;
mysql> SHOW DATABASES;
mysql> CREATE USER 'nonrootuser'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON mybb.* TO 'nonrootuser'@'localhost';
mysql> quit
$ mysql -unonrootuser -ppassword mybb < mybb_dump.sql

<ici vous recevez un avertissement indiquant que la fourniture du mot de passe sur la ligne de commande n'est pas une bonne chose à faire>

$ sudo mysql
mysql> USE mybb;
mysql> SHOW TABLES;

<ici, vérifiez si toutes les tables sont présentes - voir le post original>

mysql> quit

2. Installation des gems Ruby

En vérifiant le Gemfile dans les sources actuelles, on constate que

$ echo "gem 'mysql2', require: false" >> Gemfile

n’est pas vraiment nécessaire. Il suffit de définir la variable d’environnement IMPORT à 1.
Ce qui est nécessaire, cependant, ce sont les fichiers de développement pour les clients MySQL, ce à quoi sert la première ligne ci-dessous.

$ sudo apt-get install libmysqlclient-dev
$ cd ~/discourse
$ IMPORT=1 bundle install

2. Préparer la base de données Discourse (PostgreSQL)

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ export DB_PW="password"
$ export DB_USER="nonrootuser"

3. Exécuter l’importation réelle

La ligne suivante corrige un appel de méthode longtemps déprécié et actuellement déjà supprimé dans le script d’importation mybb.rb, qui est toujours là au moment de la rédaction et ne changera rien si cela est déjà corrigé.

$ sed -i.original 's/File.exists?/File.exist?/' script/import_scripts/mybb.rb

Vérifiez maintenant si Redis est toujours en cours d’exécution. Le script d’installation Rails le démarre mais ne l’active pas en tant que service permanent, il ne survit donc pas aux redémarrages, plantages, etc.

$ ps -aux |grep redis
silverdr    2808  0.3  0.3  89972 14512 ?        Ssl  05:25   2:04 redis-server *:6379
[….]

Si vous ne voyez rien de tel que la ligne ci-dessus, exécutez

$ redis-server --daemonize yes

qui est exactement la même commande que celle utilisée par le script d’installation Rails ci-dessus lors de la première installation.

Enfin :pray: et

$ IMPORT=1 bundle exec ruby script/import_scripts/mybb.rb

Si à ce moment-là le script ne s’arrête pas avec YAE (Yet Another Error), alors il est temps d’ouvrir cette bouteille :champagne:

Quelques éléments restants

  • OK - la seule partie manquante évidente sont les mots de passe des utilisateurs. Apparemment, même si les deux applications stockent des hashs avec des sels, à en juger par la longueur de ces hashs, “mybb” utilise un algorithme de hachage plus ancien. Par conséquent, c’est compréhensible et pas un obstacle majeur. Tout le monde devrait pouvoir réinitialiser son mot de passe la première fois.
  • Certains éléments de bbcode ne sont pas convertis. J’ai par exemple un problème avec les blocs de code, qui ont des balises autour d’eux définissant la police Courier monospaced et autres. Je n’ai plus l’énergie d’essayer d’automatiser davantage cette chose. Si vous parvenez à faire quelque chose à ce sujet, faites-le moi savoir / faites-le nous savoir ici ! :man_bowing:
2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.