Ubuntu 16
Hicimos clic en la actualización web como lo hemos hecho muchas veces. ahora falló y la aplicación no reconstruye la versión de Docker no compatible.
¿Alguna idea? Podría intentar actualizar el sistema operativo, etc., pero eso es mucho tiempo que no tenía hoy.
¿Hay alguna forma de volver?
Intenté configurar la versión al hash antiguo, pero inmediatamente obtengo la versión de Docker no compatible cuando intento reconstruir
Yo movería a una nueva máquina virtual y restauraría la base de datos allí. Es más fácil, tiene poco tiempo de inactividad, y si algo sale mal, simplemente sigues usando el servidor que funciona.
Obtuve la actualización del sistema operativo, etc., y pasó por la actualización de Postgres 15, pero ahora cuando hago reconstruir la aplicación, obtengo
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: columna "require_message" no existe en el carácter 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ESTADO: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** FALLA DEL PLUGIN **
No se puede iniciar Discourse debido a este error durante la
inicialización del plugin:
PG::UndefinedColumn: ERROR: columna "require_message" no existe
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
^
Después de ejecutar la reconstrucción (después de la actualización de Postgres)
Realizando la actualización
------------------
Analizando todas las filas en el nuevo clúster ok
Congelando todas las filas en el nuevo clúster ok
Eliminando archivos del nuevo pg_xact ok
Copiando old pg_xact al nuevo servidor ok
Estableciendo el XID más antiguo para el nuevo clúster ok
Estableciendo el siguiente ID de transacción y la época para el nuevo clúster ok
Eliminando archivos de pg_multixact/offsets ok
Copiando los offsets antiguos de pg_multixact a la nuevo servidor ok
Eliminando archivos de pg_multixact/members ok
Copiando los antiguos miembros de pg_multixact a la nuevo servidor ok
Estableciendo el siguiente ID de multixact y el desplazamiento para el nuevo clúster ok
Restableciendo archivos WAL ok
Estableciendo los contadores frozenxid y minmxid en el nuevo clúster ok
Restaurando objetos globales en el nuevo clúster ok
Restaurando esquemas de la base de datos en el nuevo clúster ok
Copiando archivos de relaciones de usuarios ok
Estableciendo el siguiente OID para el nuevo clúster ok
Sincronizando la base de datos en disco ok
Creando un script para eliminar el antiguo clúster ok
Verificando actualizaciones de extensión aviso
Tu instalación contiene extensiones que deben actualizarse
con el comando ALTER EXTENSION. El archivo
update_extensions.sql
cuando se ejecute con psql como superusuario de la base de datos actualizará
estas extensiones.
Actualización completa
----------------
Las estadísticas del optimizador no se transfieren mediante pg_upgrade.
Una vez que inicies el nuevo servidor, considera ejecutar:
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
Ejecutar este script eliminará los archivos de datos del antiguo clúster:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
FINALIZADA LA ACTUALIZACIÓN DE POSTGRES
La base de datos antigua 13 está almacenada en /shared/postgres_data_old
Para completar la actualización, reconstruye nuevamente usando:
./launcher rebuild app
¿Hay algo que pueda hacer? No estoy seguro de cómo falta una columna.
No estoy seguro de cómo hacer eso, más específicamente a qué tabla, etc. ¿Hay alguna información al respecto que pueda encontrar? Encontré esa publicación que mencionas, pero no había detalles específicos.
Ni siquiera puedo montar la base de datos lo suficiente como para agregar la columna. Voy a intentar deshabilitar todos los plugins y ver si al menos puedo iniciar el contenedor.
Ok, aquí te explicamos cómo lo solucionamos (no es para los débiles de corazón)
Actualizar Ubuntu a una versión que admita Docker 20+
Estábamos en Ubuntu 16 y tuve que llegar al menos a Ubuntu 20, así que hicimos esta actualización dos veces
Esto actualizará tu PostgreSQL de la versión 13 a la 15, consulta: PostgreSQL 15 update
Una vez que la base de datos se actualizó correctamente, ejecuté
./launcher rebuild app
Esto arrojó un error sobre una columna faltante
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse ERROR: column "require_message" does not exist at character 72
2025-05-18 14:58:28.208 UTC [1455] discourse@discourse STATEMENT: SELECT id, name, name_key, description, notify_type, auto_action_type, require_message, applies_to, position, enabled, score_type FROM "flags" ORDER BY "flags"."position" ASC
** FALLO DEL PLUGIN **
No puedes iniciar Discourse debido a este error durante la inicialización del plugin:
PG::UndefinedColumn: ERROR: column "require_message" does not exist
LINE 1: ..._key, description, notify_type, auto_action_type, require_me...
^
En este punto, no hay forma de iniciar el contenedor, así que fui a app.yml y deshabilité todos los plugins, luego ejecuté la reconstrucción de nuevo.
La aplicación finalmente se reconstruyó, luego pude ingresar a la consola de Rails para agregar la columna anterior manualmente.
./launcher enter app
rails db
ActiveRecord::Base.connection.execute("ALTER TABLE flags ADD COLUMN require_message BOOLEAN DEFAULT FALSE;")
exit
exit
Una vez que la columna estuvo presente, volví a app.yml y habilité todos los plugins e hice una reconstrucción de nuevo.
La reconstrucción tuvo éxito… ¡y estamos en funcionamiento!
Gracias @pfaffman por tu pronta respuesta, incluso un fin de semana. Vamos a crear un nuevo droplet actualizado y a migrar. Se suponía que esto sería una actualización rápida en el lugar desde la interfaz web. Pero supongo que el script no prueba la compatibilidad de Docker. Cuando actualizó Discourse Docker, arrojó un error de Docker incompatible.
Esto fue totalmente culpa nuestra por estar en una versión tan antigua de Ubuntu 16; una de las cosas buenas y malas de un sistema estable es que tiende a perdurar.