Octroi de badges en masse ne fonctionne pas ?

Salut à tous !

J’ai une liste d’e-mails dans un fichier CSV à laquelle j’attribue un badge. Je m’attendais à ce qu’un groupe ne soit pas trouvé dans notre forum (j’utilise la liste de tous les participants à un événement, et tous n’ont pas de compte sur le forum). Cela semblait fonctionner, beaucoup ont été trouvés sans problème – mais j’ai remarqué que quelqu’un qui aurait dû en recevoir un ne l’avait pas eu.

Je l’ai testé à nouveau avec seulement son adresse e-mail dans un CSV, et il est toujours apparu comme ne correspondant pas à un utilisateur existant.

J’ai vérifié et son e-mail principal sur le forum est bien le même que dans le CSV.

Des idées sur ce qui se passe ici ? :thinking:

C’est une liste de plusieurs milliers de personnes, donc je ne peux malheureusement pas tout vérifier manuellement.

1 « J'aime »

Essayez le nom d’utilisateur au lieu de l’e-mail.

Je pourrais le faire pour cet exemple, mais comme j’ai une liste de milliers d’e-mails et non de noms d’utilisateur, cela ne serait pas évolutif pour les autres.

Votre fichier csv contient-il des caractères invisibles ou des artefacts ?

Je ne pense pas – j’ai essayé de nettoyer les données et maintenant j’obtiens une erreur 502 :sweat_smile:

Vous pouvez essayer de consulter les journaux ? Je ne suis pas sûr d’être bien placé pour vous aider, mais je vais essayer. :person_shrugging:

Ce sont les erreurs qu’il y a à ce moment-là… un nouveau problème à résoudre pour moi :lolsob:

Je suis sur le point de me déconnecter pour la journée, mais j’ai trouvé ce fil de discussion concernant MaxMindDB pour commencer à essayer de déboguer cela demain :person_shrugging:

1 « J'aime »

De plus, merci de votre aide ! Je ne savais pas où se trouvaient les journaux, c’est donc une bonne chose à apprendre !

Ces avertissements ne sont pas liés à votre problème. Tous ceux qui n’ont pas configuré de clé de licence MaxMind les voient. Comme les gens perdent du temps à enquêter sur ces avertissements lorsqu’ils rencontrent d’autres problèmes, je voulais les masquer. Cependant, mon commit a été annulé, car il a cassé d’autres tests d’intégration continue et environnements de développement. Il faut le refaire d’une autre manière.

Concernant votre problème, voici les blocs de code pertinents :

Je ne vois pas de bug évident, mais je ne suis pas non plus un programmeur Ruby. Je l’ai testé sur notre instance avec une ou deux adresses e-mail dans un simple CSV séparé par des virgules, et cela a fonctionné. Cela a également fonctionné, que j’utilise des fins de ligne LF ou CRLF, juste pour exclure certains problèmes courants d’analyse de fichiers. Comment créez-vous le fichier CSV, et semble-t-il correct lorsque vous l’ouvrez dans un simple éditeur de texte, comme Notepad, Nano, Vi, etc. ?

Génial, merci pour votre aide. C’est ce que je pensais à propos de l’avertissement MaxMind, mais je n’ai eu que le temps de lire brièvement avant de me déconnecter hier.

Le fichier CSV est généré à partir de Salesforce et il contient une adresse e-mail par ligne, sans virgules ni espaces. Lorsque je le colle dans un éditeur de texte basique, tout semble parfait ; aucun caractère supplémentaire ni rien. J’ai également essayé avec un nouveau CSV contenant une seule adresse e-mail et j’ai eu la même erreur.

Strictement parlant, ce n’est donc pas un CSV, qui signifie « comma-separated values » (valeurs séparées par des virgules) :wink:. Mais je sais que l’extension de fichier est aussi largement utilisée avec d’autres séparateurs, et plus important encore, les sauts de ligne sont courants comme séparateur d’ensembles de données, donc un e-mail par ligne devrait fonctionner, et… ça fonctionne ici.

En fait, j’ai fait un mauvais test hier, car j’ai d’abord ajouté mon e-mail valide puis le second invalide. Je pensais qu’il ignorait simplement les e-mails inexistants silencieusement, mais en fait, il analyse uniquement la première entrée de chaque ligne, donc il ne permet pas plusieurs adresses e-mail sur chaque ligne. Le code le rend assez clair :

line = CSV.parse_line(line).first&.strip

Et ensuite, il ajoute la valeur entière line comme une entrée d’e-mail ou de nom d’utilisateur à faire correspondre.

Lorsque j’ajoute plusieurs e-mails sur une seule ligne chacun, en mélangeant des valides et des invalides, il affiche le bon nombre de lots appliqués avec succès et liste tous les e-mails qui n’ont pas pu être mis en correspondance. Encore testé avec des fins de ligne Windows et UNIX :

Cependant, le multi-ligne ou multi-valeurs n’est de toute façon pas votre problème, s’il échoue sur le tout premier e-mail alors qu’il est correct :thinking:. Je ne sais pas comment déboguer facilement sans reconstruire l’instance Discourse. Utilisez-vous l’installateur officiel de l’image Docker ?

EDIT : Lol, la légende de l’image a été ajoutée par une IA, en allemand, du moins ici dans mon navigateur en locale allemande. Assez détaillé, et très correct :smile:.

Aujourd’hui, j’ai appris !

Je vais vérifier avec notre équipe informatique, c’est eux qui l’ont configuré donc je ne suis pas tout à fait sûr si c’est sur Docker.

Aussi, une mise à jour quelque peu étrange… Je pense l’avoir résolu, mais je ne sais pas pourquoi ni comment. :sweat_smile:

Voici ma chaîne d’événements actuelle :

  1. Le fichier d’origine était un fichier .xlsx téléchargé depuis Salesforce, que j’ai enregistré en CSV – cela n’a pas attribué mon utilisateur de test, mais a fonctionné avec d’autres.
  2. J’ai testé avec un seul e-mail dans un nouveau CSV – cela n’a pas non plus fonctionné.
  3. J’ai essayé quelques choses pour nettoyer les données – c’est à ce moment-là que j’ai commencé à recevoir l’erreur 502 et qu’aucun e-mail n’était envoyé. Je pense que j’ai peut-être ajouté des champs vides supplémentaires ou quelque chose d’étrange ici qui a rendu le fichier trop volumineux et impossible à analyser, d’où l’ (nouvelle) erreur 502.
  4. Coller les e-mails de ce même CSV dans un nouveau CSV frais semble avoir résolu le problème – mon utilisateur de test a reçu le badge ! :tada:

… et peut-être la partie la plus étrange, c’est le seul à qui il manquait le badge ?! Je ne sais pas si j’y crois entièrement, car il semble peu probable que ce problème n’affecte que son e-mail et personne d’autre. Si cela fait une différence, c’était le tout premier e-mail du fichier.

Sinon, peut-être qu’il est juste maudit ? :lolsob:

2 « J'aime »

Super que vous ayez résolu le problème. Probablement un caractère spécial s’est glissé à l’intérieur, comme « test » et \"test\" ici sur Discourse, résultant en différents caractères de guillemets doubles, bien que j’aie entré les mêmes.

Il y a une limite de 50 000 entrées dans le code Discourse pour ce CSV, probablement elle peut être remplacée par une configuration. Cependant, je suppose qu’il n’y avait pas 50 000 lignes ? Probablement l’analyseur lui-même, ou même le serveur web, ont d’autres limites de taille/caractères plus basses.

Au fait, vous pouvez simplement passer un nouveau CSV avec tous les e-mails (et celui-ci corrigé) à « bulk badge » et il vous montrera les résultats comme si tout avait été nouvellement attribué. Ainsi, vous pouvez vérifier et vous assurer que tous les autres l’ont bien reçu.