Intenté actualizar mi instancia de Discourse, sin embargo, debido a varios problemas, parece que falló en un estado parcialmente aplicado. Al ejecutar ./launcher rebuild app, recibo el siguiente mensaje de error, que me indica una migración que ya se aplicó (parcialmente):
I, [2022-03-24T21:13:16.043071 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
Cualquier orientación sobre si hay una forma de recuperarse de esto (o si necesito asumir las consecuencias y hacer una instalación nueva) sería apreciada. ¡Gracias!
Tuve un problema similar, pero parece poco probable que mi solución te ayude.
No tienes SKIP_POST_DEPLOYMENT_MIGRATIONS configurado en tu app.yml, ¿verdad? Si es así, necesitas migrar la base de datos con él configurado a cero y luego reconstruir, pero no creo que ese sea tu problema.
Eso es lo que pensaba. Así que podría haber un problema real que tenga que ver con la capacidad de migrar de un punto en particular al actual. Pero eso no debería suceder.
Vacía todas las tablas que me daban errores (una por una, al final fueron 7), hasta que pude reconstruir la aplicación sin ningún error.
En tu caso parece que el problema es una columna:
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
Quizás deberías buscar a qué tabla pertenece, para poder vaciarla, o puedes simplemente eliminar esa columna.
Creo que el problema está en que al migrar parcialmente, esas tablas ya están creadas, por eso no puede crearlas de nuevo y da un error. ¿Quizás se podría añadir una condición a este proceso, para que no dé errores? (No soy un experto) @pfaffman
Creo que quieres eliminar la columna bookmarkable_id de la tabla bookmarks. Así que después de entrar en el contenedor y en postgres así:
cd /var/discourse
./launcher enter app
su - postgres
psql
Entonces harías
ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;
Pero hacer una copia de seguridad solo de la base de datos no sería una mala idea si el foro está en funcionamiento. Si no, puedes hacer una copia de seguridad con discourse backup después de la línea enter app de arriba.
¿Sería posible que me dieras un resumen de los comandos para hacer esto, por favor?
Puedo actualizar y todo eso fácilmente, pero es la primera vez que algo sale mal y, para ser honesto, estoy totalmente fuera de mi zona de confort, jajaja.
¿Podrías ejecutar ./launcher start app y comprobar la versión instalada en https://your.domain/admin para que pueda intentar seguir tus pasos? ¿Algún plugin?
Esta parece ser una solución probable. Deberías poder actualizar a esta y quizás entonces podrás llegar a la versión actual? Algo así tiene sentido para mí.