Récupération après une mise à niveau échouée/partiellement appliquée

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 !

1 « J'aime »

Vous pouvez exécuter

./launcher start app

pour démarrer l’ancien conteneur. Cela vous permettra de revenir en arrière.

2 « J'aime »

Oui, j’en suis conscient (et je l’ai fait) - cependant, je me demande quelle devrait être ma prochaine étape en ce qui concerne la mise à niveau.

2 « J'aime »

Oh. Ce n’était donc pas utile :person_shrugging:

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.

Non, ça n’a pas l’air.

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.

Regardez ceci :

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

Ça semble correct, @undasein.

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.

1 « J'aime »

Même problème ici ! Est-ce la bonne solution à suivre ?

C’était mon hypothèse. Vous pouvez essayer et nous faire savoir.

Je ne suis pas doué pour le discours.

@sam, des idées sur la façon de procéder ? Une installation et une mise à niveau standard s’avèrent être un cauchemar.

La méthode ci-dessus est-elle la bonne façon de résoudre ce problème ?

Merci d’avance.

n’a malheureusement pas fonctionné, j’obtiens toujours

PG::DuplicateColumn: ERROR:  column "bookmarkable_id" of relation "bookmarks" already exists

Y avait-il d’autres actions à entreprendre après ces commandes ?

ALTER TABLE bookmarks 
DROP COLUMN bookmarkable_id
DROP COLUMN bookmarkable_type;

Merci de votre aide.

Salut Nick,
J’essaie de reproduire cela, quel est le commit de votre instance ?
vous pourriez essayer avec

version: cd7ce52138bed391d5efc56366e7a6517a6079e7

dans votre app.yml, c’est il y a 10 jours, juste avant le refaire d’un commit réverti qui semble avoir eu des problèmes similaires.

2 « J'aime »

Bonjour Ben,

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 ?

2 « J'aime »

Salut Ben,

Version installée : 2.9.0.beta2
(5374e587a3)

Plugins installés :
discourse-reactions
docker_manager
styleguide

Merci,
Nick

./launcher start app
-bash: ./launcher: Aucun fichier ou dossier de ce type
 cd /var/discourse

Avant

./launcher start app
2 « J'aime »

J’ai donc remarqué que j’avais quelques mises à jour Ubuntu, donc tout sur le serveur est à jour

J’ai réessayé et toujours

PG::DuplicateColumn: ERREUR :  la colonne « bookmarkable_id » de la relation « bookmarks » existe déjà

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.

1 « J'aime »