Ok, récapitulons rapidement.
Je fais du bénévolat pour la migration d’un forum qui est actuellement sur vbulletin3.
Sur un environnement de staging, en partant d’une sauvegarde de la base de données (20 Go, vous avez bien lu).
Lancement de la mise à niveau vers vBulletin 5. Cela a pris 5-6 heures mais s’est bien passé. La version est vBulletin 5.4.
J’ai effectué un nettoyage des noms d’utilisateur pour qu’ils soient acceptés par discourse.
Maintenant, j’ai installé docker discourse et j’ai suivi plus ou moins ce guide pour la préparation. Plus ou moins, car la plupart des informations étaient redondantes ou obsolètes, mais cela m’a aidé à avoir une idée de ce qu’il fallait faire.
Je suis à l’étape où je suis littéralement en train de perdre la vue car je n’ai quasiment aucune expérience en codage Ruby.
Donc, les parties pertinentes, après avoir terminé l’installation, je suis entré dans le conteneur avec ./launcher enter app puis :
- Ajout de
freetds-devetlibmariadb-dev - Modification du Gemfile pour ajouter la gem
php_serialize. - Depuis le shell, exécution de
export IMPORT=1pour définir l’environnement d’importation. - En tant qu’utilisateur
discourse, exécution debundle install --no-deployment --without test --without development --path vendor/bundle.
J’ai obtenu l’erreur :
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the /var/www/discourse/Gemfile freeze
by running `bundle config unset deployment`.
The list of sources changed
The dependencies in your gemfile changed
You have added to the Gemfile:
* mysql2
* redcarpet
* php_serialize
* sqlite3 (~> 1.3, >= 1.3.13)
* ruby-bbcode-to-md
* reverse_markdown
* tiny_tds
* csv
* parallel
Donc, j’ai continué avec :
bundle config unset deploymentet j’ai relancé la commande précédente.- J’ai vérifié que
mysql2etphp_serializeétaient bien présents (ils l’étaient). - J’ai ajouté les anciens avatars du forum (pas de pièces jointes à importer) et j’ai attribué la propriété des répertoires à l’utilisateur
discoursedans son propre répertoire/home/discourse. - J’ai modifié
script/import_scripts/vbulletin5.rbpour changer la référence de connexion à la base de données. - En tant qu’utilisateur
discourse, j’ai exécutébundle exec ruby script/import_scripts/vbulletin5.rb.
Cela m’a retourné une erreur concernant tzinfo Integer values not supported que j’ai trouvée mentionnée ici sur ce discourse.
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
importing groups...
41 / 41 (100.0%) [2294 items/min] ]
importing users
Traceback (most recent call last):
15: from script/import_scripts/vbulletin5.rb:726:in `<main>'
14: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
13: from script/import_scripts/vbulletin5.rb:46:in `execute'
12: from script/import_scripts/vbulletin5.rb:79:in `import_users'
11: from /var/www/discourse/script/import_scripts/base.rb:916:in `batches'
10: from /var/www/discourse/script/import_scripts/base.rb:916:in `loop'
9: from /var/www/discourse/script/import_scripts/base.rb:917:in `block in batches'
8: from script/import_scripts/vbulletin5.rb:98:in `block in import_users'
7: from /var/www/discourse/script/import_scripts/base.rb:264:in `create_users'
6: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
5: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:8:in `each'
4: from /var/www/discourse/script/import_scripts/base.rb:265:in `block in create_users'
3: from script/import_scripts/vbulletin5.rb:110:in `block (2 levels) in import_users'
2: from script/import_scripts/vbulletin5.rb:718:in `parse_timestamp'
1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.5/lib/tzinfo/timezone.rb:575:in `utc_to_local'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.5/lib/tzinfo/timestamp.rb:138:in `for': Integer values are not supported (ArgumentError)
La suggestion de @Haddoq était de changer une ligne de Time.zone.at(@tz.utc_to_local(timestamp)) en Time.zone.at(timestamp).
Elle suggère également d’ajouter lastvisit dans la requête utilisateur car sinon cela provoquera une autre erreur, ce que j’ai également fait.
Cependant, maintenant, lorsque je lance la migration avec bundle exec ruby script/import_scripts/vbulletin5.rb, voici ce que j’obtiens :
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
importing groups...
41 / 41 (100.0%) [120217 items/min]
importing users
Traceback (most recent call last):
13: from script/import_scripts/vbulletin5.rb:727:in `<main>'
12: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
11: from script/import_scripts/vbulletin5.rb:46:in `execute'
10: from script/import_scripts/vbulletin5.rb:79:in `import_users'
9: from /var/www/discourse/script/import_scripts/base.rb:916:in `batches'
8: from /var/www/discourse/script/import_scripts/base.rb:916:in `loop'
7: from /var/www/discourse/script/import_scripts/base.rb:917:in `block in batches'
6: from script/import_scripts/vbulletin5.rb:80:in `block in import_users'
5: from script/import_scripts/vbulletin5.rb:723:in `mysql_query'
4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/mysql2/alias_method.rb:22:in `query'
3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `query'
2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:147:in `handle_interrupt'
1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.4/lib/mysql2/client.rb:148:in `_query': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE WHEN u.scheme='blowfish:10' THEN token (Mysql2::Error)
WHEN u.scheme='lega' at line 2
À ce stade, je suis un peu perdu. Quelqu’un peut-il m’aider ?

