J’ai essayé d’exécuter les mises à jour et de reconstruire, mais j’ai obtenu cette belle erreur :
I, [2023-01-18T08:05:48.701709 #1] INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1] INFO -- :
I, [2023-01-18T08:05:52.431807 #1] INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR: could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL: Key (name)=(vuejs) is duplicated.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT: REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
PG::UniqueViolation: ERROR: could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL: Key (name)=(vuejs) is duplicated.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'
Il y a d’autres sujets sur le forum avec des problèmes similaires (1, 2, 3) mais quand j’essaie d’entrer dans le conteneur, j’obtiens ceci :
/var/discourse# ./launcher enter app
x86_64 arch detected.
Error: No such container: app
Par conséquent, je suis incapable de supprimer les index manuellement.
Avez-vous d’autres suggestions sur l’approche à adopter ensuite ?
Merci pour le rapport de bug. Je vais examiner cela, mais je pense qu’il y a un problème avec un index dans votre base de données et qu’une migration récente tente de le résoudre, mais certains problèmes ne peuvent pas être résolus sans intervention humaine.
Je pense que le commit qui a introduit la migration qui échoue est celui-ci :
Vous pouvez essayer d’épingler votre instance Discourse à la version précédente, qui est le commit 690e2f15ab9549486aaa6750e1093c1336bf17f2. Modifiez votre fichier app.yml et définissez la clé version sous params. Assurez-vous de décommenter cette clé également !
Ensuite, tout devrait démarrer et vous devriez pouvoir supprimer le tag vuejs dupliqué, mais cela pourrait avoir des effets indésirables si le tag dupliqué est utilisé. Nous essaierons de trouver une meilleure solution, mais cela devrait fonctionner en attendant.
Nous avons déjà vu cela, c’est un problème cauchemardesque mais nous l’avons isolé comme étant lié à la mise à niveau.
La structure d’index dans PG dépend de la locale au moment de l’installation et les mises à niveau peuvent parfois entraîner un cauchemar.
Si le réindex n’est pas effectué assez tôt, des problèmes peuvent survenir. Certaines de nos premières mises à niveau de Docker PG ne l’ont pas exécuté… et certaines anciennes installations ont malheureusement une petite bombe à retardement.
Ceci est largement résolu de nos jours dans l’écosystème, mais une certaine douleur subsiste.
Peut-être que cela peut aider à identifier davantage la cause, voici donc quelques détails supplémentaires sur le système :
L’installation est en effet ancienne, depuis 2014, mais le système est mis à jour au moins une fois par mois (bien que ce soit généralement toutes les deux semaines). Il n’y a donc jamais eu de version majeure sautée.
Il n’y a pas de verrouillage de version, donc nous utilisons essentiellement la dernière version disponible sur la branche main (YOLO !).
Bien que nous ayons essayé quelques plugins non officiels il y a un certain temps, tous les plugins installés sont officiels et ce depuis… 5 ans ou plus.
J’ai le même problème, je vous ai suivi jusqu’à cette phrase.
Comment supprimez-vous réellement les doublons ? En émettant simplement une instruction SQL delete dans Data Explorer ? Qu’en est-il des enregistrements de tables étrangères pointant vers cette balise ?
Mise à jour 1
OK, je vois que vous ne pouvez pas exécuter d’instructions update.
J’ai maintenant utilisé l’interface graphique et renommé simplement la balise.