Erreur de mise à niveau de Discourse "FAILED TO BOOTSTRAP"

Bonjour à tous,

Premier message ici, merci d’avance de m’accueillir. Je suis en train d’exécuter une série de mises à jour routinières (bien que tardives) sur notre forum propulsé par Discourse (https://forum.troygrady.com), et nous sommes arrivés à un point où la mise à jour échoue après avoir exécuté les commandes « git pull » et « rebuild » en ligne de commande, comme conseillé par les instructions à l’écran.

Veuillez trouver ci-dessous la sortie de la commande « ./launcher rebuild app ». J’ai également exécuté le script « discourse doctor » et je peux publier ou transmettre un lien vers cette sortie si vous pensez que cela ne pose pas trop de problème de sécurité.

Je précise que, bien que je sois un développeur PHP/SQL raisonnablement compétent avec une expérience occasionnelle en administration d’applications Linux, je ne suis pas du tout technique sur Discourse, et je n’ai pas été celui qui a configuré notre installation initiale. Votre préféré, je le sais !

Je me contente simplement de suivre les instructions à l’écran, qui ont commencé par cliquer sur les boutons bleus « upgrade » dans l’interface utilisateur pour Docker. Une fois cela terminé, j’ai vu l’instruction à l’écran de me connecter via la ligne de commande et d’exécuter git pull et launcher rebuild. C’est ainsi que je suis arrivé à ce point.

Je dois aussi ajouter que notre forum fonctionnait parfaitement avant cela, sans aucun problème, si cela aide au diagnostic. La seule raison pour laquelle nous effectuons cette mise à jour est simplement de rester à jour avec les versions que vous publiez afin de ne pas trop prendre de retard. C’est le conflit central de ma mentalité « si ça marche, ne le répare pas », craignant que la mise à jour ne provoque une erreur au-delà de ma capacité à la corriger. Et effectivement, nous en sommes là.

À l’heure où j’écris ces lignes, le forum est complètement hors ligne et, comme il s’agit d’un composant central de notre activité, j’aimerais le remettre en fonctionnement le plus rapidement possible.

Toute information serait grandement appréciée !

ÉCHEC

Pups::ExecError: cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’ a échoué avec le code de retour #<Process::Status: pid 3972 exit 1>
Emplacement de l’échec : /pups/lib/pups/exec_command.rb:112:in `spawn’
Échec de l’exécution avec les paramètres {“cd”=>“$home”, “hook”=>“db_migrate”, “cmd”=>[“su discourse -c ‘bundle exec rake db:migrate’”]}
f89318158c2c276c69a60d600def8a838ae4ad4bc7bafbe665fb1cd77c130ad1
** ÉCHEC DU BOOTSTRAP ** Veuillez faire défiler vers le haut et rechercher les messages d’erreur précédents, il peut y en avoir plus d’un.
./discourse-doctor peut aider à diagnostiquer le problème.

Salut, bienvenue dans la communauté Discourse.

Où installez-vous ? Quel système d’exploitation ? Suivez-vous notre guide officiel ?

Je pense que vous avez effectivement des messages d’erreur antérieurs ; il semble que votre base de données (serveur) soit inaccessible.

Peut-être devriez-vous envisager un hébergement géré une fois votre forum de nouveau opérationnel…

1 « J'aime »

Bonjour Gavin ! Merci pour votre réponse rapide. Nous utilisons un Droplet via Digital Ocean, et lorsque je me connecte, j’obtiens :

Bienvenue sur Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-210-generic x86_64)

En ce qui concerne l’utilisation de votre guide officiel, je ne peux pas en dire grand-chose. Il s’agit d’une installation que nous exploitons depuis peut-être 3 à 4 ans sans problème, bien que je ne sois pas la personne qui l’ait configurée initialement. Elle n’a généralement nécessité que des mises à jour via le navigateur et, occasionnellement, une reconstruction en ligne de commande, qui ont toutes fonctionné sans aucune autre intervention de notre part jusqu’à présent.

J’ai enregistré la totalité de la sortie du terminal de la reconstruction dans un fichier et je peux l’analyser. Cependant, nous sommes dans un environnement Droplet virtuel et nous n’avons rien modifié depuis sa configuration. En fait, nous nous connectons rarement, car Discourse fonctionne parfaitement avec les mises à jour via le navigateur. Je ne sais donc pas ce qui aurait pu changer pour rendre soudainement la base de données inaccessible.

Bien sûr. C’est un cas où tout fonctionnait parfaitement depuis des années, donc nous ne sommes pas particulièrement pressés de changer. Cependant, nous serions heureux d’embaucher quelqu’un pour examiner occasionnellement notre installation et s’assurer que tout est à jour, plutôt que de le faire moi-même. Existe-t-il une ressource ou un annuaire pour trouver des experts Discourse susceptibles d’être ouverts à ce type de mission ?

Merci !

Vous devrez envisager de le mettre à jour. C’est ancien. Très ancien.

Mais commençons d’abord par vous mettre en marche. Pouvez-vous poster le journal d’erreur ? Il faut voir quelle est l’erreur réelle.

Ok, recherche de warnings et d’erreurs dans la sortie de reconstruction, voici ce que j’ai trouvé (ci-dessous).

227:initdb: warning: activation de l’authentification « trust » pour les connexions locales
294:update-alternatives: warning: forçage de la réinstallation de l’alternative /usr/share/postgresql/13/man/man1/psql.1.gz car le groupe de liens psql.1.gz est cassé
324:update-alternatives: warning: forçage de la réinstallation de l’alternative /usr/share/postgresql/13/man/man1/postmaster.1.gz car le groupe de liens postmaster.1.gz est cassé

1684:createdb: error: échec de la création de la base de données : ERROR: la base de données « discourse » existe déjà
1811:I, [2021-08-29T20:18:40.246150 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
1813:I, [2021-08-29T20:18:40.253584 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
2563:StandardError: Une erreur s’est produite, cette migration et toutes les suivantes ont été annulées :
2698:-- add_column(:groups, :imap_last_error, :text)
2961:** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d’erreur précédents, il peut y en avoir plus d’un.
3118:createdb: error: échec de la création de la base de données : ERROR: la base de données « discourse » existe déjà
3245:I, [2021-08-29T20:22:40.262592 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
3247:I, [2021-08-29T20:22:40.274767 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
3960:StandardError: Une erreur s’est produite, cette migration et toutes les suivantes ont été annulées :
4087:** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d’erreur précédents, il peut y en avoir plus d’un.
4224:/erreur – recherchez le mot ‘erreur’
4358:createdb: error: échec de la création de la base de données : ERROR: la base de données « discourse » existe déjà
4485:I, [2021-08-29T20:26:59.373901 #1] INFO – : > cd /var/www/discourse && bash -c “touch -a /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log”
4487:I, [2021-08-29T20:26:59.381142 #1] INFO – : > cd /var/www/discourse && bash -c “ln -s /shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log”
5200:StandardError: Une erreur s’est produite, cette migration et toutes les suivantes ont été annulées :
5327:** ÉCHEC DU BOOTSTRAP ** veuillez faire défiler vers le haut et rechercher les messages d’erreur précédents, il peut y en avoir plus d’un.

Merci encore d’avoir examiné cela, Gavin, et désolé pour les mises à niveau du système d’exploitation négligées.

Ci-dessus, c’est simplement ce que j’obtiens en recherchant les mots « error » et « warning » dans la sortie du script, dont j’ai sauvegardé l’intégralité ici. S’il y a autre chose que je devrais chercher dans cette sortie, faites-le-moi savoir, je suis ravi de la publier.

Ah, désolé, je réalise que cette réponse est un peu peu explicative. Voici les détails concernant le message « StandardError ». Il semble qu’une requête INSERT ait échoué en raison d’une clé dupliquée. Le contenu de la requête a été masqué pour plus de lisibilité ; je peux le fournir si nécessaire.

I, [2021-08-29T20:23:37.257772 #1] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake db:migrate’
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse DETAIL: Key (id)=(-2) already exists.
2021-08-29 20:23:42.937 UTC [3996] discourse@discourse STATEMENT: INSERT INTO
[…]
FROM plugin_store_rows
WHERE plugin_name = ‘discourse-data-explorer’ AND type_name = ‘JSON’

rake aborted!
StandardError: Une erreur s’est produite ; cette migration et toutes les suivantes ont été annulées :

ERROR: duplicate key value violates unique constraint “data_explorer_queries_pkey”
DETAIL: Key (id)=(-2) already exists.

essayez ceci

1 « J'aime »

Oui, cela fonctionne (comme vous l’avez constaté).

Quelque chose s’est mal passé lors de la mise à niveau elle-même.

Publiez simplement vos besoins dans #marketplace ou parcourez-le pour voir qui y répond régulièrement.

tout ce que vous avez à faire, une fois que Discourse sera de nouveau opérationnel, c’est :

  • sauvegarder Discourse
  • télécharger la sauvegarde
  • mettre à jour le droplet
  • reconstruire l’application

ensuite, vous devriez être prêt pour encore quelques années.

Super, merci.

Si je comprends bien, il semble qu’une table de base de données utilisée par un plugin appelé « data explorer » contienne une ligne en double, et que la suppression de cette ligne permette au script de reconstruction de se poursuivre. D’après ce fil de discussion, il semblerait également que cette erreur — ou des erreurs similaires — se soient déjà produites auparavant, et que des mises à jour de Discourse aient peut-être été déployées pour éviter que cela ne se reproduise à l’avenir. Autrement dit, les futures mises à niveau que nous exécuterons pourraient ne pas rencontrer ce problème.

Fais-moi savoir si tu penses que j’ai bien interprété cela !

Tu fais référence à la mise à niveau d’Ubuntu ? Si c’est le cas, c’est noté.

C’est exact.

Encore une fois, c’est exact :slight_smile:

Oui :smiley:

D’accord ! J’ai reçu mes instructions. Merci beaucoup pour votre retour rapide.

1 « J'aime »

Pour clore ce sujet, pour toute personne rencontrant cette erreur, il semble que plusieurs problèmes se soient produits.

En ce qui concerne la mise à niveau elle-même, une ligne dupliquée dans le plugin “data_explorer” causait un problème et devait être supprimée.

Cependant, dans le cadre de cette opération, nous avons également effectué une mise à niveau du système d’exploitation d’Ubuntu 16 vers 20, ce qui a provoqué une erreur réseau, rendant le droplet Digital Ocean inaccessible après le redémarrage. Plus précisément, il semble que lors du passage du système d’exploitation à la nouvelle configuration “Netplan”, un élément de la configuration empêchait le script de démarrage de l’interface réseau de s’exécuter correctement au moment prévu. Ainsi, le droplet a démarré, mais pas le réseau. En accédant ensuite au console de récupération via le navigateur et en relançant le script de l’interface réseau, l’interface a été réactivée, nous permettant de nouveau d’y accéder depuis l’extérieur. Tant que nous n’aurons pas à redémarrer le droplet, tout devrait bien se passer jusqu’à ce que nous trouvions un moment pour l’éteindre et tester une correction de la configuration Netplan.

Je sais qu’il s’agit probablement d’un cas marginal, mais je me souviens avoir lu quelque part que les mises à niveau du système d’exploitation ne provoquent généralement pas de problèmes. Et bien que cela soit probablement vrai la plupart du temps, ce n’était pas le cas ici, ce qui nous a maintenus hors ligne pendant une bonne demi-journée, le temps que les fuseaux horaires permettent à nos experts techniques de nous remettre en ligne.

Bref, tout est résolu pour le moment. Merci à tous pour vos réactions rapides.

5 « J'aime »