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 :
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.
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;
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.
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.
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.