Restauración fallida debido a que la clave (plugin_name, key)=(discourse-data-explorer, q:-1) está duplicada

Cuando actualicé mi Discourse, descubrí que no funcionaba. Puedo ver la página de categorías, pero no puedo acceder a la página principal ni a la de últimos mensajes, como la página de últimos mensajes:

Ya he eliminado todos los complementos, incluidos los oficiales y los no oficiales. Sin embargo, el problema persiste.

Por lo tanto, intenté restaurar la copia de seguridad, pero encontré el siguiente mensaje:

[2020-07-12 01:16:20] ERROR:  no se pudo crear el índice único "index_plugin_store_rows_on_plugin_name_and_key"
[2020-07-12 01:16:20] DETALLE:  La clave (plugin_name, key)=(discourse-data-explorer, q:-1) está duplicada.
[2020-07-12 01:16:20] EXCEPCIÓN: psql falló: DETALLE:  La clave (plugin_name, key)=(discourse-data-explorer, q:-1) está duplicada.

[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 me gusta

Hay datos corruptos en la tienda de complementos.

Si no te importa ningún dato personalizado que hayas guardado en el explorador de datos, intenta lo siguiente:

./launcher enter app
rails c
PluginStore.where(plugin_name: 'discourse-data-explorer').delete_all
4 Me gusta
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)>


Parece que hay algo mal.

¿Puedes darme más información?

Debería ser PluginStoreRow, no PluginStore. Intenta esto:

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

:warning: Esto eliminará de forma irreversible todos los datos de data-explorer de tu sitio

4 Me gusta

Entonces, ¿qué debo hacer?
El foro ahora no es legible, parece que latest.json se ha perdido.

Intenta reconstruir la aplicación. Si eso no funciona, revisa /logs en busca de errores.

1 me gusta

¿cómo ver los registros?

Si te refieres a los registros del proceso de reconstrucción, aquí está el mensaje de error al reconstruir (todas las palabras en rojo están aquí).


2020/07/14 11:33:39 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No existe el archivo o directorio


#------




2020-07-14 11:33:42.023 UTC [49] LOG: el sistema de base de datos está listo para aceptar conexiones
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 datos "discourse" ya existe
2020-07-14 11:33:47.025 UTC [62] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: la creación de la base de datos falló: ERROR: la base de datos "discourse" ya existe
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: el rol "discourse" ya existe
2020-07-14 11:33:47.083 UTC [73] postgres@discourse STATEMENT:  create user discourse;
ERROR: el rol "discourse" ya existe


Hola, ¿cómo se ejecuta el código, por favor?

@xiasummer

Solo si tienes una copia de seguridad COMPLETA y CONFIRMADA de tu base de datos actual y de la carpeta de uploads, puedes mover o copiar esa(s) copia(s) fuera del directorio compartido. Por ejemplo (adapta esto a tu configuración):

mv  /var/discourse/shared  /tmp

Asegúrate, por supuesto, de tener copias de seguridad completas de la BD primero.

Luego, puedes reconstruir desde cero:

./launcher rebuild app

Y después puedes restaurar desde la línea de comandos:

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

A continuación, puedes realizar una restauración desde la línea de comandos usando tu última copia de seguridad de la manera habitual.

Esto restaurará tu copia de seguridad de la aplicación al estado en que se encontraba en el momento de tu última copia de seguridad BUENA y COMPLETA.

Esto solo se recomienda SI tienes una copia de seguridad completa y reciente de toda tu base de datos y de tus archivos de uploads.

Si realizaste una copia de seguridad sin los archivos de uploads, por supuesto, puedes encontrarlos en /tmp/shared/standalone/uploads y copiarlos de la siguiente manera:

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

Una vez que todo funcione nuevamente y estés seguro de que la restauración se realizó como esperabas, por supuesto, puedes eliminar tu directorio de staging:

rm -rf /tmp/shared

Esta es una forma de proceder.

Puede haber otras formas, pero así es como procedería yo si tuviera una copia de seguridad completa, actual y buena.

2 Me gusta

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