Restauration échouée en raison de la clé (plugin_name, key)=(discourse-data-explorer, q:-1) dupliquée

Lors de la mise à niveau de mon Discourse, j’ai constaté qu’il ne fonctionnait pas. Je peux voir la page des catégories, mais je ne peux pas accéder à la page principale ou à la page des derniers sujets, comme la page des derniers sujets :

J’ai déjà supprimé tous les plugins, y compris les plugins officiels et non officiels. Cependant, le problème persiste.

J’ai donc tenté de restaurer une sauvegarde, mais j’ai reçu le message suivant :

[2020-07-12 01:16:20] ERROR:  impossible de créer l'index unique « index_plugin_store_rows_on_plugin_name_and_key »
[2020-07-12 01:16:20] DETAIL:  La clé (plugin_name, key)=(discourse-data-explorer, q:-1) est dupliquée.
[2020-07-12 01:16:20] EXCEPTION: psql a échoué : DETAIL:  La clé (plugin_name, key)=(discourse-data-explorer, q:-1) est dupliquée.

[2020-07-12 01:16:20] /var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
/var/www/discourse/lib/backup_restore.rb:188:in `block in start!'

1 « J'aime »

Il y a des données corrompues dans la boutique de plugins.

Si vous ne tenez pas aux données personnalisées que vous avez enregistrées dans l’explorateur de données, essayez ceci :

./launcher enter app
rails c
PluginStore.where(plugin_name: 'discourse-data-explorer').delete_all
4 « J'aime »
root@HFT-app:/var/www/discourse# rails c
[1] pry(main)> PluginStore.where(plugin_name: 'discourse-data-explorer').delete_all
NoMethodError: méthode `where' non définie pour PluginStore:Class
La méthode suggérée est : when
from (pry):1:in `__pry__'
[2] pry(main)>


Il semble y avoir une erreur.

Pouvez-vous me fournir plus d’informations ?

Il s’agit de PluginStoreRow, et non de PluginStore. Essayez ceci :

./launcher enter app
rails c
PluginStoreRow.where(plugin_name: 'discourse-data-explorer').delete_all

:warning: Cela supprimera de manière irréversible toutes les données de data-explorer de votre site.

4 « J'aime »

Que dois-je faire alors ?
Le forum n’est plus lisible actuellement, il semble que latest.json ait été perdu.

Je tenterais de reconstruire l’application. Si cela ne fonctionne pas, vérifiez les erreurs dans /logs.

1 « J'aime »

Comment consulter les journaux ?

Si vous faites référence aux journaux du processus de reconstruction, voici le message d’erreur affiché lors de la reconstruction (tous les mots en rouge y figurent).


2020/07/14 11:33:39 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Aucun fichier ou dossier de ce type


#------




2020-07-14 11:33:42.023 UTC [49] LOG: le système de base de données est prêt à accepter les connexions
I, [2020-07-14T11:33:46.972466 #1]  INFO -- :
I, [2020-07-14T11:33:46.972792 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
2020-07-14 11:33:47.025 UTC [62] postgres@postgres ERROR: la base de données "discourse" existe déjà
2020-07-14 11:33:47.025 UTC [62] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: erreur : la création de la base de données a échoué : ERROR: la base de données "discourse" existe déjà
I, [2020-07-14T11:33:47.026573 #1]  INFO -- :
I, [2020-07-14T11:33:47.026936 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2020-07-14 11:33:47.083 UTC [73] postgres@discourse ERROR: le rôle "discourse" existe déjà
2020-07-14 11:33:47.083 UTC [73] postgres@discourse STATEMENT:  create user discourse;
ERROR: le rôle "discourse" existe déjà


Bonjour, comment exécuter le code s’il vous plaît ?

@xiasummer

Si et seulement si (SSE) vous avez une sauvegarde COMPLÈTE et CONFIRMÉE de votre base de données actuelle et de votre dossier uploads, vous pouvez déplacer ou copier ces sauvegardes hors du répertoire partagé, par exemple (mais adaptez selon votre configuration) :

mv  /var/discourse/shared  /tmp

Assurez-vous bien sûr d’avoir d’abord effectué des sauvegardes complètes de la base de données.

Ensuite, vous pouvez reconstruire à partir de zéro :

./launcher rebuild app

Puis vous pouvez restaurer depuis la ligne de commande :

cp -rf /tmp/shared/backups/default /var/discourse/shared/standalone/backups

Ensuite, vous pouvez procéder à une restauration depuis la ligne de commande en utilisant votre dernière sauvegarde de la manière habituelle.

Cela restaurera votre sauvegarde de l’application à l’état où elle se trouvait au moment de votre dernière sauvegarde BONNE et COMPLÈTE.

Ceci n’est recommandé QUE si vous disposez d’une sauvegarde complète et récente de l’ensemble de votre base de données et de vos fichiers uploads.

Si vous avez effectué une sauvegarde sans les uploads, vous pouvez bien sûr les trouver dans /tmp/shared/standalone/uploads et les copier comme suit :

cp -rf /tmp/shared/standalone/uploads/* /var/discourse/shared/standalone/uploads

Ensuite, une fois que tout fonctionne à nouveau et que vous êtes confiant que la restauration s’est déroulée comme espéré, vous pouvez bien sûr supprimer votre répertoire de mise en scène :

rm -rf /tmp/shared

Ceci est une façon de procéder.

Il peut exister d’autres méthodes, mais voici comment je procéderais si j’avais une sauvegarde complète, récente et fiable.

2 « J'aime »

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