betagouv / conseillers-entreprises

Le service d’accompagnement des entreprises
https://conseillers-entreprises.service-public.fr/
15 stars 7 forks source link

Corriger les erreurs `rails-ujs has already been loaded` #946

Open n-b opened 4 years ago

n-b commented 4 years ago

PLACE-DES-ENTREPRISES-6A

Sentry remonte ces erreurs js côté app:

Error: rails-ujs has already been loaded! 
TypeError: $(".ui.modal").modal is not a function. (In '$(".ui.modal").modal({closable…

Il y a toujours une première erreur “rails-ujs has already been loaded”, suivie d'une ou plusieurs “modal is not a function”, si l'utilisateur va sur plusieurs pages. C’est surtout nous qui apparaissons dans les logs, mais j'ai l'impression que ça touche tous les utilisateurs de l'app.


Ancienne description À vue de nez c’est surtout (uniquement?) pour les membres de l’équipe (nous). Ça ressemble à un problème de chargement de js, on a aussi des rails-ujs is already loaded. L’appel à modal() est en premier dans les initialisations dans semantic-ui.js, mais je ne crois pas avoir vu ça avant qu’on utilise .ui.modal. Je ne sais pas si c’est dû à modal ou un problème général de chargement de semantic-ui.

n-b commented 4 years ago

Bonne nouvelle, j'ai compris le problème et je le reproduis! Moins bonne nouvelle, c’est bien tordu, parce que c’est la faute à turbolinks.

J’ai remarqué que chacun des events remontés sur sentry commençait par une erreurs 404 ou 500 (coucou #1122) avec le log “rails-ujs has already been loaded”, puis que chacune des navigations vers les pages suivantes, en fait des xhr via turbolinks, déclenchaient une erreur “modal is not a function”. En fait, c’est https://github.com/turbolinks/turbolinks/issues/179 : quand la réponse est une erreur, Turbolinks change de comportement et réinterprete le header. C’est ce qui déclenche la première erreur; dans notre cas, ça met fomantic-ui / jquery / notre handler en vrac; lors des navigations suivantes, on a les erreurs sur fomantic-ui.

On peut faire un workaround, par exemple https://github.com/turbolinks/turbolinks/issues/277#issuecomment-317424899 a l'air raisonnable. Sinon, c’est peut-être le moment de se débarrasser de turbolinks.