Error de actualización de Discourse "FALLÓ AL INICIAR"

Hola a todos:

Mi primer mensaje aquí; gracias de antemano por recibirme. Estoy ejecutando una serie de actualizaciones rutinarias (aunque con cierto retraso) en nuestro foro impulsado por Discourse (https://forum.troygrady.com), y hemos llegado a un punto donde la actualización falla después de ejecutar los pasos de línea de comandos “git pull” y “rebuild”, tal como indican las instrucciones en pantalla.

A continuación, el resultado del comando “./launcher rebuild app”. También ejecuté el script “discourse doctor” y puedo publicar o enviar un enlace a su salida, siempre que consideren que eso no plantee un problema de seguridad.

Debo mencionar que, aunque soy un desarrollador PHP/SQL razonablemente competente con experiencia ocasional en administración de aplicaciones Linux, no tengo conocimientos técnicos sobre Discourse, y no fui quien configuró nuestra instalación inicial. ¡Sé que es mi favorito!

Solo estoy siguiendo las instrucciones en pantalla, que comenzaron con hacer clic en los botones azules de “actualizar” en la interfaz de usuario para Docker. Una vez completado eso, vi la instrucción en pantalla para iniciar sesión desde la línea de comandos y ejecutar git pull y launcher rebuild. Así es como llegué a este punto.

También agregaría que nuestro foro funcionaba absolutamente bien antes de esto, sin ningún problema, por si eso ayuda en el diagnóstico. La única razón por la que estamos realizando esta actualización es simplemente mantenernos al día con lo que ustedes lanzan, para no quedarnos demasiado atrasados. Este es el conflicto central de mi mentalidad de “si no está roto, no lo arregles”, con el miedo de que actualizar provoque algún error que esté más allá de mi capacidad para solucionarlo. Y, efectivamente, aquí estamos.

Al momento de escribir esto, el foro está completamente fuera de línea y, dado que es un componente central de nuestro negocio, me gustaría ponerlo en funcionamiento lo antes posible.

¡Cualquier orientación será muy apreciada!

FALLÓ

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ falló con el código de retorno #<Process::Status: pid 3972 exit 1>
Ubicación del fallo: /pups/lib/pups/exec_command.rb:112:in `spawn’
La ejecución falló con los parámetros {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
f89318158c2c276c69a60d600def8a838ae4ad4bc7bafbe665fb1cd77c130ad1
** FALLO AL INICIALIZAR ** por favor, desplace hacia arriba y busque mensajes de error anteriores; puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.

Hola, bienvenido a la comunidad de Discourse.

¿Dónde estás instalando? ¿Qué sistema operativo usas? ¿Estás siguiendo nuestra guía oficial?

Creo que efectivamente podrías tener mensajes de error anteriores; parece que tu base de datos (servidor) podría ser inaccesible.

Quizás deberías considerar un alojamiento gestionado una vez que tu foro vuelva a estar en funcionamiento…

1 me gusta

¡Hola, Gavin! Gracias por tu rápida respuesta. Estamos en un Droplet de Digital Ocean y, al iniciar sesión, aparece lo siguiente:

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-210-generic x86_64)

En cuanto a usar tu guía oficial, no puedo decirte nada al respecto. Esta es una instalación que hemos estado ejecutando durante quizás 3 o 4 años sin problemas, aunque no fui yo quien la configuró inicialmente. Por lo general, solo ha requerido actualizaciones desde el navegador y, ocasionalmente, reconstrucciones desde la línea de comandos, las cuales han funcionado sin que tuviéramos que hacer nada más hasta ahora.

Tengo guardada toda la salida del terminal de la reconstrucción en un archivo y puedo revisarla. Pero estamos en un entorno virtual de Droplet y no hemos cambiado nada desde que lo configuramos. De hecho, rara vez iniciamos sesión, ya que Discourse funciona sin problemas con las actualizaciones desde el navegador. Así que no sé qué habría cambiado de repente para que la base de datos quedara inaccesible.

Claro. Se trata de un caso en el que las cosas han funcionado bien durante años, así que no nos cuesta mucho cambiar. Sin embargo, estaríamos encantados de contratar a alguien para que revise de vez en cuando lo que tenemos instalado y asegure que todo esté actualizado, en lugar de hacerlo yo. ¿Existe algún recurso o directorio para encontrar profesionales de Discourse que puedan estar interesados en este tipo de trabajo?

¡Gracias!

Necesitarías considerar actualizarlo. Está obsoleto. Muy obsoleto.

Pero primero, pongámoslo en marcha. ¿Podrías publicar el registro de errores? Necesito ver cuál es el error real.

Ok, buscando advertencias y errores en la salida de la reconstrucción, esto es lo que encontré (a continuación).

227:initdb: advertencia: habilitando la autenticación “trust” para conexiones locales
294:update-alternatives: advertencia: forzando la reinstalación de la alternativa /usr/share/postgresql/13/man/man1/psql.1.gz porque el grupo de enlaces psql.1.gz está roto
324:update-alternatives: advertencia: forzando la reinstalación de la alternativa /usr/share/postgresql/13/man/man1/postmaster.1.gz porque el grupo de enlaces postmaster.1.gz está roto

1684:createdb: error: la creación de la base de datos falló: ERROR: la base de datos “discourse” ya existe
1811:I, [2021-08-29T20:18:40.246150 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
1813:I, [2021-08-29T20:18:40.253584 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
2563:StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores se cancelaron:
2698:-- add_column(:groups, :imap_last_error, :text)
2961:** FALLO AL INICIALIZAR ** por favor, desplázate hacia arriba y busca mensajes de error anteriores; puede haber más de uno.
3118:createdb: error: la creación de la base de datos falló: ERROR: la base de datos “discourse” ya existe
3245:I, [2021-08-29T20:22:40.262592 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
3247:I, [2021-08-29T20:22:40.274767 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
3960:StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores se cancelaron:
4087:** FALLO AL INICIALIZAR ** por favor, desplázate hacia arriba y busca mensajes de error anteriores; puede haber más de uno.
4224:/error – busca la palabra ‘error’
4358:createdb: error: la creación de la base de datos falló: ERROR: la base de datos “discourse” ya existe
4485:I, [2021-08-29T20:26:59.373901 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
4487:I, [2021-08-29T20:26:59.381142 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
5200:StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores se cancelaron:
5327:** FALLO AL INICIALIZAR ** por favor, desplázate hacia arriba y busca mensajes de error anteriores; puede haber más de uno.

Gracias de nuevo por echar un vistazo a esto, Gavin, y disculpa por las actualizaciones del sistema operativo descuidadas.

Lo anterior es solo lo que obtengo al buscar las palabras “error” y “warning” en la salida del script, cuya totalidad he guardado aquí. Si hay algo más que deba buscar en esa salida, házmelo saber, estaré encantado de publicarlo.

Ah, lo siento, me doy cuenta de que la salida es algo poco explicativa. Aquí están los detalles sobre el mensaje “StandardError”. Parece que una consulta INSERT falló debido a una clave duplicada. El contenido interno de la consulta ha sido omitido por legibilidad, pero puedo incluirlo si es necesario.

I, [2021-08-29T20:23:37.257772 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse ERROR: el valor de clave duplicada viola la restricción de unicidad “data_explorer_queries_pkey”
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse DETAIL: La clave (id)=(-2) ya existe.
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse STATEMENT: INSERT INTO
[…]
FROM plugin_store_rows
WHERE plugin_name = ‘discourse-data-explorer’ AND type_name = ‘JSON’

rake aborted!
StandardError: Ha ocurrido un error; esta y todas las migraciones posteriores se han cancelado:

ERROR: el valor de clave duplicada viola la restricción de unicidad “data_explorer_queries_pkey”
DETAIL: La clave (id)=(-2) ya existe.

prueba esto

1 me gusta

Sí, eso funciona (como ya has visto).

Algo salió mal durante la propia actualización.

Simplemente publica tus necesidades en #marketplace o búscalo para ver quién responde habitualmente allí.

lo único que necesitas hacer, una vez que Discourse esté de nuevo en funcionamiento, es:

  • hacer una copia de seguridad de Discourse.
  • descargar la copia de seguridad.
  • actualizar el droplet.
  • reconstruir la aplicación.

entonces deberías estar listo para funcionar durante unos años más.

¡Genial, gracias!

Si lo entiendo correctamente, parece que hay una tabla de base de datos utilizada por un plugin llamado “data explorer” que contiene una fila duplicada, y eliminar esa fila duplicada permite que el script de reconstrucción continúe. Por ese hilo, también parece que este error —o errores similares— han ocurrido antes, y es posible que se hayan realizado actualizaciones en Discourse para evitar que esto suceda en el futuro. Es decir, las futuras actualizaciones que ejecutemos podrían no encontrar este problema.

Avísame si crees que lo he interpretado correctamente.

¿Te refieres a la actualización de Ubuntu? Si es así, entendido.

Correcto.

Correcto de nuevo :slight_smile:

:smiley:

¡Ok! Tengo mis instrucciones. Muchas gracias por la rápida retroalimentación.

1 me gusta

Solo para cerrar el tema: para cualquiera que se encuentre con este error, parece que tuvimos varios problemas.

En cuanto a la actualización en sí, la fila duplicada en el plugin “data_explorer” estaba causando un problema y necesitaba ser eliminada.

Sin embargo, como parte de esto, también realizamos una actualización del sistema operativo de Ubuntu 16 a 20, lo que provocó un error de red, dejando el droplet de Digital Ocean inaccesible tras el reinicio. Específicamente, parece que al pasar el sistema operativo a la nueva configuración de “Netplan”, algo en la configuración impedía que el script de arranque de la interfaz de red se completara en el momento en que se ejecutaba. Así que el droplet se inició, pero no la red. Al entrar después, a través de la consola de recuperación en el navegador, y ejecutar nuevamente el script de la interfaz de red, se activó la interfaz y nos permitió acceder a ella desde el exterior nuevamente. Mientras no tengamos que reiniciar el droplet, estaremos bien hasta que podamos encontrar tiempo para apagarlo y probar una solución para la configuración de Netplan.

Sé que probablemente este sea un caso excepcional, pero recuerdo haber leído en algún lugar que las actualizaciones del sistema operativo generalmente no causan problemas. Y aunque eso probablemente sea cierto la mayoría de las veces, no fue el caso aquí, y nos mantuvo fuera de línea durante buena parte de medio día hasta que los husos horarios se alinearon para que nuestro personal técnico contratado pudiera volver a ponerlo en funcionamiento.

Así que, por ahora, todo está resuelto. Gracias por la rápida colaboración de todos.

5 Me gusta