Besoin de déplacer des éléments d’une instance de Discourse à une autre ?
Il existe un outil en ligne de commande pour exporter un sujet, un ensemble de sujets ou une catégorie entière, et un autre pour les importer à l’autre extrémité.
Exportation/Importation de Sujets
- un ou plusieurs sujets et leurs réponses
- les utilisateurs qui ont posté dans le sujet
Exportation/Importation de Catégories
- la catégorie et toutes ses sous-catégories
- ses paramètres de sécurité
- les groupes personnalisés mentionnés dans les paramètres de sécurité
si l’un des groupes a activée la demande d’adhésion, cela provoquera un crash. Désactivez ceci avant l’exportation
- tous les sujets et messages dans la catégorie et les sous-catégories
- tous les utilisateurs qui ont posté, et les affecte aux groupes
Début : Identifier les ID
Tout d’abord, identifiez l’ID (ou les ID) de l’=Exportation= que vous souhaitez exporter. Vous le trouverez à la fin de l’URL utilisée pour y accéder.
-
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797 -
https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
(dans ce cas, vous êtes au milieu d’un sujet - prenez le premier nombre) -
https://meta.discourse.org/c/howto/faq/4
ID(s) de Catégorie ou de Sujet
Sujets Multiples
Vous pouvez sélectionner plus d’un sujet en ajoutant des ID séparés par un espace ; cela fonctionne dans le champ ci-dessus (je ne pense pas que cela fonctionne pour les catégories cependant) :
53797 200943 124096
Exécuter le Script d’Exportation
L’outil peut être exécuté en tant qu’utilisateur root à l’intérieur du conteneur :
cd /var/discourse
./launcher enter app
Exécutez cette commande :
discourse export_=Exportation= =ID=
Le résultat devrait ressembler à ceci :
Démarrage de l’exportation de =Exportation=…
Où arrivent tous les nouveaux utilisateurs ?
Exportation enregistrée dans =Exportation=-export-2021-08-27-015437.jsonTerminé
Déplacer le Fichier Exporté
Le fichier .json exporté doit être déplacé de l’intérieur du conteneur d’application où vous avez effectué l’exportation vers l’intérieur du conteneur de l’instance de réception. Cela nécessite quelques étapes.
Le copier vers l’« extérieur »
Quittez le conteneur si vous ne l’avez pas déjà fait
exit
Vous devriez maintenant avoir une invite comme celle-ci :
root@votre_serveur:/var/discourse
Utilisez docker pour copier le fichier hors du conteneur (je ne pense pas que vous puissiez le déplacer)
docker cp app:/var/www/discourse/=FileName= .
Le déplacer vers l’autre instance
Ceci dépasse le cadre de ce guide, mais ceci pourrait vous aider à y parvenir :
Le copier dans le conteneur de l’instance de réception
Connectez-vous en SSH à votre instance de réception en tant que root et accédez au répertoire Discourse :
cd /var/discourse
Utilisez docker une fois de plus pour copier le fichier dans l’autre conteneur
docker cp =FileName= app:/var/www/discourse
Importer le Contenu
Entrez dans le conteneur de l’instance de réception :
./launcher enter app
Exécutez le script d’importation
discourse import_=Exportation= =FileName=
Fait !
Vous pourriez avoir besoin de régler quelques détails, mais espérons que tout soit terminé.
Conseils Avancés
Gem Ruby Manquante
Lors de l’exécution d’une importation de catégorie complexe, mon instance manquait la gem Ruby ‘Listen’.
Ceci a été résolu en faisant ceci : (en utilisant l’utilisateur Discourse à l’intérieur du conteneur)
./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit
Ceci a cassé la console rails, nécessitant une reconstruction par la suite
./launcher rebuild app
Multisite
Dans un environnement multisite, utilisez la variable d’environnement RAILS_DB.
RAILS_DB=xxxmoves discourse export_=Exportation= =ID=
RAILS_DB=dancerehab discourse import_=Exportation= =FileName=
Veuillez signaler les bugs dans la catégorie bug, et demander des améliorations dans la catégorie #feature.
Sujets Connexes
Dernière révision par @SaraDev le 2022-07-13T00:00:00Z