Besoin de déplacer des éléments d’une instance 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 bout.
Export/Import de sujets
- un ou plusieurs sujets et leurs réponses
- les utilisateurs qui ont posté dans le sujet
Export/Import 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 la demande d’adhésion activée, cela plantera. Désactivez cette option avant l’exportation
- tous les sujets et messages de la catégorie et des sous-catégories
- tous les utilisateurs qui ont posté, et les assigne aux groupes
Commencer : Identifier les IDs
Tout d’abord, identifiez l’ID (ou les IDs) de l’=Export= 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
Plusieurs sujets
Vous pouvez sélectionner plus d’un sujet en ajoutant des IDs 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_=Export= =ID=
La sortie devrait ressembler à ceci :
Starting export of =Export=…
Where are the new users all coming from?
Export saved to =Export=-export-2021-08-27-015437.jsonDone
Déplacer le fichier exporté
Le fichier .json exporté doit être déplacé de l’intérieur du conteneur de l’application où vous avez fait l’exportation vers l’intérieur du conteneur de l’instance de réception. Cela nécessite plusieurs étapes.
Copiez-le à l’« extérieur »
Quittez le conteneur si ce n’est pas déjà fait
exit
Vous devriez maintenant avoir un invite de commande comme ceci :
root@yourserver:/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= .
Déplacez-le vers l’autre instance
Cela dépasse le cadre de ce guide, mais cela pourrait vous aider :
Copiez-le 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 à nouveau docker 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_=Export= =FileName=
Terminé !
Vous devrez peut-être régler quelques détails, mais en espérant que tout soit terminé.
Conseils avancés
Gem Ruby manquant
Lors de l’importation complexe d’une catégorie, mon instance manquait du « Listen » Ruby.
Cela 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
Cela 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_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=
Veuillez signaler les bugs dans la catégorie Contribute > Bug et demander des améliorations dans la catégorie Contribute > Feature.
Sujets connexes
Dernièrement revu par @SaraDev le 2022-07-13T00:00:00Z