Ripristino Fallito a causa di Key (plugin_name, key)=(discourse-data-explorer, q:-1) è duplicato

Quando ho aggiornato il mio Discourse, ho scoperto che non funzionava. Posso vedere la pagina delle categorie, ma non riesco ad accedere alla pagina principale o all’ultima pagina, come ad esempio l’ultima pagina:

Ho già eliminato tutti i plugin, inclusi quelli ufficiali e non ufficiali. Tuttavia, il problema persiste.

Ho quindi provato a ripristinare il backup, ma ho trovato il seguente messaggio:

[2020-07-12 01:16:20] ERROR:  could not create unique index "index_plugin_store_rows_on_plugin_name_and_key"
[2020-07-12 01:16:20] DETAIL:  Key (plugin_name, key)=(discourse-data-explorer, q:-1) is duplicated.
[2020-07-12 01:16:20] EXCEPTION: psql failed: DETAIL:  Key (plugin_name, key)=(discourse-data-explorer, q:-1) is duplicated.

[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 Mi Piace

È presente un dato corrotto nel plugin store.

Se non ti interessano i dati personalizzati salvati nell’explorer dei dati, prova quanto segue:

./launcher enter app
rails c
PluginStore.where(plugin_name: 'discourse-data-explorer').delete_all
4 Mi Piace
root@HFT-app:/var/www/discourse# rails c
[1] pry(main)> PluginStore.where(plugin_name: 'discourse-data-explorer').delete_all
NoMethodError: undefined method `where' for PluginStore:Class
Did you mean?  when
from (pry):1:in `__pry__'
[2] pry(main)>


Sembra che ci sia qualcosa che non va.

Puoi darmi ulteriori informazioni?

Dovrebbe essere PluginStoreRow, non PluginStore. Prova questo:

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

:warning: Questo eliminerà irreversibilmente tutti i dati di data-explorer dal tuo sito

4 Mi Piace

Allora cosa dovrei fare?
Il forum ora non è più leggibile, sembra che latest.json sia andato perso.

Proverei a ricostruire l’app. Se ciò non funziona, controlla /logs per eventuali errori.

1 Mi Piace

Come visualizzare i log?

Se ti riferisci ai log del processo di ricostruzione, ecco il messaggio di errore che appare durante la ricostruzione (tutte le parole in rosso sono presenti qui).


2020/07/14 11:33:39 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No such file or directory


#------




2020-07-14 11:33:42.023 UTC [49] LOG:  database system is ready to accept connections
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:  database "discourse" already exists
2020-07-14 11:33:47.025 UTC [62] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
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:  role "discourse" already exists
2020-07-14 11:33:47.083 UTC [73] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists


Ciao, come si esegue il codice?

@xiasummer

Se e solo se (IFF) hai un backup completo CONFERMATO del tuo database corrente e della cartella uploads; puoi spostare o copiare quel (quei) backup fuori dalla directory condivisa, ad esempio (ma adatta alla tua configurazione):

mv  /var/discourse/shared  /tmp

Assicurati di avere prima backup completi del DB, naturalmente.

Quindi, puoi ricostruire da zero:

./launcher rebuild app

e poi puoi ripristinare dalla riga di comando:

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

Successivamente, puoi eseguire un ripristino dalla riga di comando utilizzando il tuo ultimo backup nel modo normale.

Questo ripristinerà il backup della tua applicazione allo stato in cui si trovava al momento dell’ultimo backup BUONO e COMPLETO.

Questo è consigliato SOLO SE hai un backup completo e recente dell’intero database e del file uploads.

Se hai eseguito un backup senza gli uploads, puoi trovarli, naturalmente, in /tmp/shared/standalone/uploads e puoi copiarli come segue:

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

Quindi, dopo che tutto funziona di nuovo e sei sicuro che il ripristino sia andato come speravi, puoi naturalmente eliminare la directory di staging:

rm -rf /tmp/shared

Questo è un modo per procedere.

Potrebbero esserci altri modi, ma questo è come procederei se avessi un backup completo, recente e valido.

2 Mi Piace

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