GeotrekCE / Geotrek-rando-v3

Geotrek public data website (version 3)
MIT License
16 stars 16 forks source link

Erreur 500 / Erreur : Sorry this is not working properly #718

Open AudreyRemy opened 2 years ago

AudreyRemy commented 2 years ago

Bonjour, Nous avons des erreurs sur notre site nature64.fr sur certaines fiches rando.

https://nature64.fr/trek/11538-GR-10-De-Hendaye-a-Olhette-etape-n1?parentId=4614

https://nature64.fr/trek/11553-GR-10-Du-Col-des-Veaux-a-Bidarray-etape-n5?parentId=4614

https://nature64.fr/trek/11443-GR-78-de-Lestelle-Betharram-a-Bruges-etape-n1?parentId=109

https://nature64.fr/trek/11447-GR-78-De-Bruges-a-Buzy-etape-n2?parentId=109

Je ne comprends pas d’où viennent ces erreurs. Je suis allée vérifier, la géométrie semble bien valide. Je n'ai pas relevé toutes les fiches avec erreurs mais il se peut qu'il y en ait d'autres.

Merci d'avance pour vos retours. Bonne journée.

camillemonchicourt commented 2 years ago

C'est nouveau ? Suite à une mise à jour de Geotrek-rando-v3 ? En quelle version ? A voir si ce n'est pas le même soucis que https://github.com/GeotrekCE/Geotrek-rando-v3/issues/717. J'investigue.

camillemonchicourt commented 2 years ago

Il faudrait des logs de Geotrek-rando-v3 pour pouvoir identifier le soucis et t'aider (avec docker-compose up au moment où les pages en erreur sont ouvertes dans un navigateur web, voir https://github.com/GeotrekCE/Geotrek-rando-v3/blob/main/docs/installation.md#install-geotrek-rando).

Et savoir en quelle version de Geotrek-rando-v3 vous êtes. Pour voir si le même soucis que l'autre ticket mentionné avec l'ajout dans la 3.9.0 des signalétiques, aménagements publiées et services.

En tout cas pour la dernière indiquée, elle a :

Je ne vois pas de soucis similaire à l'autre ticket mentionné à priori. Les types de signalétique et d'aménagements utilisés sont bien renvoyées par les routes des types (https://geotrek-admin.le64.fr/api/v2/infrastructure_type/ et https://geotrek-admin.le64.fr/api/v2/signage_type/)

AudreyRemy commented 2 years ago

Bonjour @camillemonchicourt,

Désolée pour le temps de réponse, je n'ai pas accès au serveur donc j'avais besoin de mes collègues.

Nous venons de faire la commande et voilà le résultat :

adm100522@PZL301-DOCKER:/var/docker-cd64/geotrek-rando$ sudo docker-compose up geotrek-rando is up-to-date Attaching to geotrek-rando geotrek-rando | yarn run v1.22.18 geotrek-rando | $ NODE_ENV=production node ./src/server.js geotrek-rando | > Ready on http://localhost:3000 geotrek-rando | TypeError: Cannot read properties of undefined (reading 'pictogramUri') geotrek-rando | at DetailsInformationDesk (/app/src/.next/server/chunks/4074.js:3955:52) geotrek-rando | at d (/app/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:33:498) geotrek-rando | at bb (/app/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:16) geotrek-rando | at a.b.render (/app/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:42:43) geotrek-rando | at a.b.read (/app/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:41:83) geotrek-rando | at Object.exports.renderToString (/app/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:52:138) geotrek-rando | at renderPage (/app/node_modules/next/dist/server/render.js:673:46) geotrek-rando | at Object.ctx.renderPage (/app/src/.next/server/pages/_document.js:59:34) geotrek-rando | at Object.defaultGetInitialProps (/app/node_modules/next/dist/server/render.js:315:51) geotrek-rando | at Function.getInitialProps (/app/src/.next/server/chunks/3590.js:515:20)

Version Geotrek rando 3.8

Merci.

camillemonchicourt commented 2 years ago

OK encore un "TypeError: Cannot read properties of undefined (reading 'pictogramUri')"...

Encore une fois la rando doit être associée à un objet non renvoyé par l'API donc il n'arrive pas à en récupérer le picto, donc la page crashe.

Il faudrait qu'on voit pour ignorer ce genre de cas plutôt que de crasher la page.

Mais en attendant il faudrait quel objet pose soucis dans tes données et ton API. Cette erreur remonte en ouvrant quelle fiche rando ?

AudreyRemy commented 2 years ago

Alors je pense que c'était cette page https://nature64.fr/trek/11538-GR-10-De-Hendaye-a-Olhette-etape-n1?parentId=4614 mais le problème maintenant c'est qu'on a une erreur 502 bad gateway dès la page d'accueille www.nature64.fr

camillemonchicourt commented 2 years ago

Là c'est autre chose... A voir ce que vous avez fait qui a entraîné cela... ?

AudreyRemy commented 2 years ago

docker-compose up docker-compose logs -t

Faut-il faire sudo docker-compose up -d --force-recreate ?

camillemonchicourt commented 2 years ago

Ah bah c'est normal alors. Quand on fait "docker-compose up" (sans l'option -d) dès qu'on sort du terminal, le container docker est arrêté ! C'est expliqué dans la doc et im ne faut pas le faire en production en effet.

AudreyRemy commented 2 years ago

Merci Camille le container est relancé. Donc la page est https://nature64.fr/trek/11538-GR-10-De-Hendaye-a-Olhette-etape-n1?parentId=4614

camillemonchicourt commented 2 years ago

OK je vois le soucis grâce aux logs. Cette rando est associé au lieu d'information ayant l'ID 12 : https://geotrek-admin.le64.fr/api/v2/trek/11538/ Mais on voit que l'API ne renvoit pas de lieu d'information avec l'ID 12 : https://geotrek-admin.le64.fr/api/v2/informationdesk/

A voir si ce lieu d'information existe bien dans votre BDD ? Et si oui, pourquoi l'API de Geotrek-admin ne le renvoie pas ?

C'est le même soucis pour la rando 11553 (https://geotrek-admin.le64.fr/api/v2/trek/11553/) qui est associée au lieu d'information 6, alors que l'API ne renvoie pas de lieu d'information avec l'ID 6 : https://geotrek-admin.le64.fr/api/v2/informationdesk/

Et toujours pareil pour la rando 11447 (https://geotrek-admin.le64.fr/api/v2/trek/11447/) qui est associée au lieu d'information 10, alors que celui-ci n'est pas non plus renvoyée https://geotrek-admin.le64.fr/api/v2/informationdesk/

Peux-tu vérifier si il y a un soucis dans tes données ou ta BDD Geotrek-admin, ou si il y a un soucis sur l'API ?

babastienne commented 2 years ago

A priori les lieux d'informations existent bien, le problème est plus compliqué que ça.

L'API va chercher les lieux d'information liés à des objets publiés. Or, le lieux d'information n'est associé à aucun itinéraire publié puisque l'étape N°1 du GR10 n'est pas publiée. Or, comme l'itinérance permet d'afficher les enfants même lorsque ceux-ci ne sont pas publiés ca peut poser un problème (c'est ce cas précis qui se produit pour le 64).

Il faudrait corriger l'API pour qu'elle affiche les lieux d'information liés à des objets publiés ou à des objets enfants non publiés dont le parent est publié.

Mais il faudrait surtout modifier Rando V3 pour que l'appli ne crash pas dès qu'il manque une information.

camillemonchicourt commented 2 years ago

OK je capte, merci pour l'investigation et les précisions. Solution facile : Associer ces lieux d'information aussi à la fiche itinérance mère (publiée) et pas seulement aux étapes de l'itinérance (non publiées).

Et en effet, côté Geotrek-rando-v3, on a évoqué plus largement le fait que quand un objet n'est pas renvoyé par l'API Geotrek-rando devrait l'ignorer et non pas crasher.

AudreyRemy commented 2 years ago

Bonjour Merci @babastienne et @camillemonchicourt Comment dois-je procéder pour associer ces lieux d'informations ? Je pense que les éléments viennent de Tourinsoft via le parser.

camillemonchicourt commented 2 years ago

Salut. Ah OK ils seraient associés automatiquement aux étapes mais pas à l'itinérance (itinéraire parent) ? Il te suffit de modifier l'itinéraire parent et d'y associer les lieux de renseignement souhaités.

A voir si cette info n'est pas écrasée par le prochain import des itinéraires depuis Tourisnsoft ?

AudreyRemy commented 2 years ago

L'itinéraire parent est créé dans Geotrek. Seules les étapes arrivent de Tourinsoft donc ça devrait être bon. Je vais tester. Merci @camillemonchicourt

AudreyRemy commented 2 years ago

Lorsque j'ajoute le lieux de renseignements de l'étape 1 (étape qui contenait l'erreur) à l'itinéraire parent, j'obtiens l'erreur sur l’itinéraire parent également. Toutes les étapes ne sont pas concernées par cette erreur alors qu'elles ont des lieux de renseignement qui ne sont pas associés à l’itinéraire parent

camillemonchicourt commented 2 years ago

Oui, car les lieux de renseignement sont gardés en cache par Geotrek-rando-v3 pour pas qu'il les redemande à l'API de Geotrek-admin à chaque fois. Pour remettre le cache serveur de Geotrek-rando-v3 et ainsi interroger à nouveau l'API, il faut restart le docker de Geotrek-rando-v3 (docker-compose restart). Après ça, ça devrait être bon.

AudreyRemy commented 2 years ago

Merci. Mes collègues sont absents donc je vous tiens informés dès que je trouve une autre personne qui pourrait restart Geotrek Rando. Par contre je ne comprends pas pourquoi toutes les étapes ne sont pas concernées par cette erreur alors qu'elles ont des lieux de renseignement également

camillemonchicourt commented 2 years ago

Car elles doivent être associés à des lieux de renseignement qui sont associés par ailleurs à au moins un itinéraire publié. L'API renvoie les lieux de renseignement qui sont associés à au moins un itinéraire publié. Le soucis se pose sur les lieux de renseignement qui sont uniquement associés à des itinéraires non publiés (étapes).

AudreyRemy commented 2 years ago

Ok merci @camillemonchicourt pour tes retours

AudreyRemy commented 2 years ago

C'est bon ça a l'air de fonctionner. Merci @babastienne et @camillemonchicourt Je n'ai pas fermé le ticket car il y a toujours l'idée de ne pas faire crasher l'appli mais si cela est déjà mentionné par ailleurs je te laisse clôturer Camille.

noelmartinon commented 2 years ago

Bonjour, Même erreur 500 constatée en upgrade de 3.8.5 vers latest (3.10.2). J'ai remis la 3.8.5 et constaté que le problème survient dès le passage en 3.9.0. Rien dans les logs nginx ni dans ceux du docker. Je suis preneur de toute idée.

camillemonchicourt commented 2 years ago

Salut. La page te renvoie la même erreur (Sorry this is not working properly), indiquant que la page n'arrive pas à se construire, mais l'origine du soucis est certainement différent. Dans le cas du CD64, le soucis était particulier à leur contexte, où certains lieux de renseignement étaient associés uniquement à des itinéraires non publiés. Donc ces lieux de renseignement n'étaient pas renvoyés par l'API et donc les pages des randos associées à ces lieux de renseignement non renvoyés par l'API plantaient.

Globalement, on aimerait faire en sorte que si des infos associées à un objet ne sont pas renvoyés dans l'API, cela ne fasse pas planter la page de l'objet. C'est une évolution à prévoir, financer, réaliser.

Dans ton cas @noelmartinon, il faudrait voir la page de quel objet plante, voir quel est le message d'erreur affiché dans la console du navigateur, et analyser au niveau du contenu de cet objet, si une info est manquante dans l'API.

Dans la 3.9.0, on a ajouté l'affichage de certains champs sur les randos, mais je ne vois pas en quoi cela pourrait faire planter des pages. On a aussi ajouté l'affichage des aménagements et signalétiques publiés sur les cartes des randos et sites Outdoor, mais là non plus je ne vois pas pourquoi cela pourrait faire planter des pages. Si tu peux repasser en 3.10 et indiquer des pages précises dont le chargement plante ? Tu peux m'envoyer ça par email si ton Geotrek-rando-v3 n'est pas encore sur une URL publiable.

camillemonchicourt commented 2 years ago

Le soucis remonté par @noelmartinon est le même que https://github.com/GeotrekCE/Geotrek-rando-v3/issues/717#issuecomment-1167138933

Il a des randos qui ont des services à proximité. L'API de Geotrek-admin renvoie bien ces services, mais pas les types de services associés. Donc cela fait planter l'affichage des pages de ces randos qui ont des services à proximité.

A creuser au niveau de Geotrek-admin et de son API, même si côté Geotrek-rando-v3, quand l'API ne renvoie pas un objet, cela ne devrait pas faire planter la page, mais ignorer l'objet absent de l'API.