Problèmes lors de l'importation de pièces jointes depuis XenForo

Salut les gars,

J’ai réussi à migrer la base de données XenForo, contenant 1 500 membres et environ 75 000 messages, vers un nouveau serveur hébergeant Discourse.

Une question concernant les pièces jointes : d’après le script, il semble que l’importation se fasse si le dossier des pièces jointes existe. Ma question est : où dois-je placer les pièces jointes provenant de l’ancien serveur ?

a) Dans la partie Docker du serveur (quelque part)
b) À l’emplacement d’origine : /var/discourse/shared/standalone/tmp/attachments

?

1 « J'aime »

Quelqu’un connaît le chemin ???

1 « J'aime »

Vous placez les fichiers où vous le souhaitez, tant qu’ils sont accessibles depuis la machine effectuant l’importation, puis vous indiquez ce chemin ici :

  ATTACHMENT_DIR = '/tmp/attachments'

Si vous exécutez l’opération dans un conteneur Docker et que vous les placez sous var/discourse/shared/standalone/tmp/attachments, vous utiliserez /shared/tmp/attachments comme chemin. Vous pouvez vérifier en recherchant les fichiers lorsque vous êtes à l’intérieur du conteneur.

2 « J'aime »

D’accord, Jay, merci pour ces informations. Je fais une réinstallation propre cette fois avec la configuration du dossier des pièces jointes. Je les placerai dans /shared/tmp/attachments et je reviendrai ici avec les résultats.

Une petite question… y a-t-il un moyen d’importer aussi les mots de passe des comptes ?

Quelqu’un peut-il regarder où se trouve le problème ?

root@my-app:/var/www/discourse# RAILS_ENV=production bundle exec ruby script/import_scripts/xenforo.rb
Chargement des groupes existants...
Chargement des utilisateurs existants...
Chargement des catégories existantes...
Chargement des publications existantes...
Chargement des sujets existants...

création des utilisateurs
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 100 utilisateurs déjà importés
Ignorance de 4 utilisateurs déjà importés

importation des catégories...
       23 / 23 (100.0 %)  [326682 éléments/min]
création des sujets et des publications
       74 / 74752 (  0.1 %)  [99817 éléments/min]  Traceback (most recent call last):
        18: from script/import_scripts/xenforo.rb:396:in `\u003cmain\u003e'
        17: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        16: from script/import_scripts/xenforo.rb:32:in `execute'
        15: from script/import_scripts/xenforo.rb:174:in `import_posts'
        14: from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
        13: from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
        12: from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
        11: from script/import_scripts/xenforo.rb:180:in `block in import_posts'
        10: from /var/www/discourse/script/import_scripts/base.rb:490:in `create_posts'
         9: from /var/www/discourse/script/import_scripts/base.rb:490:in `each'
         8: from /var/www/discourse/script/import_scripts/base.rb:491:in `block in create_posts'
         7: from script/import_scripts/xenforo.rb:186:in `block (2 levels) in import_posts'
         6: from script/import_scripts/xenforo.rb:315:in `process_xenforo_post'
         5: from script/import_scripts/xenforo.rb:324:in `process_xf_attachments'
         4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each'
         3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in `each_key'
         2: from script/import_scripts/xenforo.rb:326:in `block in process_xf_attachments'
         1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `squish!'
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in `gsub!': impossible de modifier une chaîne figée (FrozenError)
root@my-app:/var/www/discourse#

Cette fois, j’ai placé les pièces jointes dans : var/discourse/shared/standalone/tmp/attachments

Je l’ai trouvé… Le problème est que le dossier contenant les pièces jointes à importer DOIT se trouver à l’intérieur de l’application Docker, au chemin /var/www/discourse/…/tmp/attachments.

Pour l’instant, tout va bien, le script est en cours d’exécution et devrait se terminer dans environ 1h30.

edit : Il semble que l’importation des pièces jointes ne fonctionne toujours pas… Je suis actuellement à 78 % de l’importation, et dans chaque message où nous avions une image ou une pièce jointe, il reste [ATTACH]9788[/ATTACH], avec le numéro entre les balises correspondant au nombre de fichiers téléchargés, donc le suivant sera [ATTACH]9789[/ATTACH]…

Toute aide à ce sujet serait la bienvenue :confused:

1 « J'aime »

Si vous avez importé des publications avant de configurer correctement le répertoire d’attachments, vous devrez supprimer toutes les publications et recommencer l’importation.

Malheureusement, l’importation est terminée et je ne vois aucune information concernant les pièces jointes dans le journal ?

Si vous avez exécuté le script d’importation et que le répertoire des pièces jointes n’existait pas, les pièces jointes ont été ignorées.

Je n’ai pas fait cela… J’ai exécuté une nouvelle importation avec les pièces jointes en place.

Je ne pense pas pouvoir vous aider ici. Si vous disposez d’un budget, veuillez consulter Redirecting…

Voici mon dernier conseil : je suis presque certain que les pièces jointes ne se trouvent pas à l’endroit où le script peut les localiser, et que vous devrez tout supprimer et recommencer depuis le début.

Avant de relancer le script, depuis l’intérieur du dossier, vous devriez taper :

 ls /tmp/attachments

/tmp/attachments correspond à ce que vous avez spécifié dans la ligne :

  ATTACHMENT_DIR = '/tmp/attachments'

Si la commande ne liste pas les pièces jointes, vous devez continuer à chercher où elles se trouvent.

2 « J'aime »

D’accord, pourriez-vous me dire exactement où placer les pièces jointes de XenForo sur le nouveau serveur afin que je sois certain que le script les trouve ?

Quelqu’un ?

Je fais une nouvelle importation (la 5ᵉ fois)… Je suis fatigué… :roll_eyes:

Dois-je trier les pièces jointes de XenForo dans un certain ordre ou simplement copier/coller la structure et le répertoire /tmp/attachments ?

Je procède actuellement à l’installation sur une nouvelle machine virtuelle avec un instantané, ce qui me permet de modifier rapidement les détails et de recommencer la migration.

Hier, j’ai placé le dossier des pièces jointes de XenForo, qui a la structure suivante : un dossier principal nommé attachments contenant 9 sous-dossiers nommés de 0 à 9, chacun renfermant environ 600 à 700 pièces jointes (.jpg). J’ai placé ce dossier dans var/discourse/shared/standalone/tmp/attachments et modifié le script xenforo.rb en ajoutant :

ATTACHMENT_DIR = '/shared/tmp/attachments'

J’ai testé avec la commande ls /tmp/attachments et j’ai bien obtenu la structure attendue, mais je rencontre la même erreur que la première fois :

creating topics and posts
74 / 74752 ( 0.1%) [99817 items/min] Traceback (most recent call last):
18: from script/import_scripts/xenforo.rb:396:in \u003cmain\u003e' 17: from /var/www/discourse/script/import_scripts/base.rb:47:in perform’
16: from script/import_scripts/xenforo.rb:32:in execute' 15: from script/import_scripts/xenforo.rb:174:in import_posts’
14: from /var/www/discourse/script/import_scripts/base.rb:869:in batches' 13: from /var/www/discourse/script/import_scripts/base.rb:869:in loop’
12: from /var/www/discourse/script/import_scripts/base.rb:870:in block in batches' 11: from script/import_scripts/xenforo.rb:180:in block in import_posts’
10: from /var/www/discourse/script/import_scripts/base.rb:490:in create_posts' 9: from /var/www/discourse/script/import_scripts/base.rb:490:in each’
8: from /var/www/discourse/script/import_scripts/base.rb:491:in block in create_posts' 7: from script/import_scripts/xenforo.rb:186:in block (2 levels) in import_posts’
6: from script/import_scripts/xenforo.rb:315:in process_xenforo_post' 5: from script/import_scripts/xenforo.rb:324:in process_xf_attachments’
4: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each' 3: from /usr/local/lib/ruby/2.6.0/set.rb:338:in each_key’
2: from script/import_scripts/xenforo.rb:326:in block in process_xf_attachments' 1: from /usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in squish!’
/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb:22:in gsub!': can't modify frozen String (FrozenError) root@my-app:/var/www/discourse#Text préformaté`

2019-11-15T23:00:00Z

J’ai supprimé le ! de la chaîne gsub! à l’endroit suivant :

/usr/local/lib/ruby/gems/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/string/filters.rb

Maintenant, le script d’importation ne s’arrête plus et continue, affichant ces informations concernant les pièces jointes :

Quoi qu’il en soit, par exemple pour la dernière ligne :

Could not find file /shared/tmp/attachments//2/2485-c3da9f6ee1e33d3ebf418c5dea1f9e8a.data. Skipping attachment id 2485

…le fichier EST bien présent à ce chemin, mais il n’y a pas d’extension .data. À la place, il y a .JPG.

Toute aide est la bienvenue.

2019-11-15T23:00:00Z

Le script comportait un bug que j’ai identifié et corrigé ; je parviens maintenant à importer les pièces jointes.

1 « J'aime »