J’ai tenté de mettre à niveau mon instance Discourse, mais en raison de quelques problèmes, il semble qu’elle ait échoué dans un état partiellement appliqué. Lorsque j’exécute ./launcher rebuild app, j’obtiens le message d’erreur suivant, qui m’indique une migration qui a déjà été (partiellement) appliquée :
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
Toute aide sur la façon de récupérer de cette situation (ou si je dois me résigner à faire une nouvelle installation) serait appréciée. Merci !
J’ai eu un problème similaire, mais il semble peu probable que ma solution vous aide.
Vous n’avez pas SKIP_POST_DEPLOYMENT_MIGRATIONS défini dans votre app.yml, n’est-ce pas ? Si c’est le cas, vous devez migrer la base de données avec cette option définie sur zéro, puis reconstruire, mais je ne pense pas que ce soit votre problème.
C’est ce que je pensais. Il pourrait donc y avoir un problème réel lié à la capacité de migrer d’un point particulier vers le point actuel. Mais cela ne devrait pas arriver.
J’ai vidé toutes les tables qui me causaient des erreurs (une par une, il y en avait 7 à la fin), jusqu’à ce que je puisse reconstruire l’application sans aucune erreur.
Dans votre cas, il semble que le problème soit une colonne :
PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists
Peut-être devriez-vous chercher à quelle table elle appartient, pour pouvoir la vider, ou vous pouvez simplement supprimer cette colonne.
Je crois que le problème vient du fait que lors d’une migration partielle, ces tables sont déjà créées, d’où l’impossibilité de les recréer et l’erreur retournée. Peut-être pourrait-on ajouter une condition à ce processus, pour qu’il ne génère pas d’erreurs ? (Je ne suis pas un expert) @pfaffman
Je pense que vous voulez supprimer la colonne bookmarkable_id de la table bookmarks. Donc, après être entré dans le conteneur et dans postgres comme ceci :
cd /var/discourse
./launcher enter app
su - postgres
psql
Ensuite, vous feriez :
ALTER TABLE bookmarks
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;
Mais faire une sauvegarde uniquement de la base de données ne serait pas une mauvaise idée si le forum est en cours d’exécution. Sinon, vous pouvez faire une sauvegarde avec discourse backup après la ligne enter app ci-dessus.
Serait-il possible de me donner la procédure à suivre pour faire cela, s’il vous plaît ?
Je peux faire les mises à jour et tout le reste facilement, mais c’est la première fois que quelque chose tourne mal et pour être honnête, je suis totalement hors de ma zone de confort lol.
Pourriez-vous lancer ./launcher start app et vérifier la version installée sur https://your.domain/admin afin que je puisse essayer de retracer vos étapes. Y a-t-il des plugins ?
Cela semble être une solution probable. Vous devriez pouvoir passer à celle-ci et peut-être alors atteindre la version actuelle ? Quelque chose comme ça me semble logique.