DuplicateColumn et multisite:migrate ont échoué

La mise à niveau de 2.9.0.beta2 vers 2.9.0.beta4 a échoué avec le message d’erreur PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists. Les conseils de Recovering from failed/partially applied upgrade m’ont aidé à rétablir le service. Je crée un nouveau sujet car ce problème semble spécifiquement lié à une installation multisite (en docker).

Le problème semble être que multisite:migrate essaie de réexécuter la même migration qui avait déjà été exécutée dans le cadre des migrations précédentes. Le résultat a été PG::DuplicateColumn: ERROR: column "bookmarkable_id" of relation "bookmarks" already exists. D’après le message d’erreur, cela pourrait être lié à la fonctionnalité des signets polymorphes, https://github.com/discourse/discourse/pull/16261 (ping @martin?).

Après avoir rencontré le problème, ma solution rapide et sale a été de :

  1. Commenter la ligne - exec: cd /var/www/discourse \u0026\u0026 sudo -E -u discourse bundle exec rake multisite:migrate dans le fichier de configuration containers/web_only.yml.
  2. Supprimer manuellement les migrations (partiellement appliquées?) liées aux signets : ./launcher enter data et utiliser psql pour se connecter à mes deux bases de données Discourse et exécuter ALTER TABLE bookmarks DROP COLUMN bookmarkable_id, DROP COLUMN bookmarkable_type;
  3. Relancer la reconstruction : ./launcher rebuild web_only 2\u003e\u00261

Qu’est-ce que je pourrais manquer maintenant que multisite:migrate n’a pas été exécuté ? J’apprécierais toute réflexion. Les deux sites semblent fonctionner cependant. :crossed_fingers:

1 « J'aime »

Alors je pense que ce que je ferais, c’est de lancer une autre mise à niveau et de faire si vous êtes sorti d’affaire.

Avez-vous des idées sur la raison pour laquelle vous feriez cela ? Ou des pistes sur ce à quoi s’attendre en exécutant la migration multisite ? Vous voyez, j’ai une aversion pour l’exécution de scripts que je ne comprends pas. :slightly_smiling_face:

Parce qu’au moins vous savez plus ou moins comment le réparer et vous aurez complètement oublié lors de la prochaine mise à niveau (si vous êtes comme moi). Je suis à peu près sûr que cela fonctionnera, car je pense que c’est ce que d’autres ont constaté lorsqu’ils ont résolu ce problème.

1 « J'aime »

Logique, il semble que vous n’ayez jamais exécuté la post-migration pour supprimer les colonnes qui étaient initialement là, que j’ai supprimées dans https://github.com/discourse/discourse/pull/16261. Je devrai peut-être simplement vérifier les colonnes avant de les rajouter ici discourse/db/migrate/20220322024216_add_bookmark_polymorphic_columns.rb at 037172beaae0743176eee653bd2cd4cd1ce5c7e9 · discourse/discourse · GitHub, je ferai un commit pour cela.

Je viens de fusionner un commit qui devrait aider :

4 « J'aime »