Ich habe eine Liste von E-Mails in einer CSV-Datei, denen ich einen Badge zuweisen möchte. Ich habe erwartet, dass eine Gruppe nicht in unserem Forum übereinstimmt (ich verwende die Liste aller Teilnehmer einer Veranstaltung, und nicht alle von ihnen haben ein Forenkonto). Es schien zu funktionieren, viele wurden gut zugeordnet – aber ich bemerkte, dass jemand, der einen hätte bekommen sollen, keinen bekommen hatte.
Ich habe es erneut mit nur seiner E-Mail-Adresse in einer CSV getestet, und es wurde immer noch als keine Übereinstimmung mit einem vorhandenen Benutzer angezeigt.
Ich könnte das für dieses eine Beispiel tun, aber da ich eine Liste mit Tausenden von E-Mails und nicht mit Benutzernamen habe, wäre dies nicht für alle anderen skalierbar.
Sie können versuchen, die Protokolle zu überprüfen? Ich bin mir nicht sicher, ob ich gut geeignet bin, Ihnen dabei zu helfen, aber ich werde es versuchen.
Diese Warnungen haben nichts mit Ihrem Problem zu tun. Jeder, der keinen MaxMind-Lizenzschlüssel konfiguriert hat, sieht sie. Da die Leute Zeit mit der Untersuchung dieser Warnungen verschwenden, wenn sie auf andere Probleme stoßen, wollte ich sie stummschalten. Mein Commit wurde jedoch rückgängig gemacht, da er einige andere CI-Tests und Entwicklungsumgebungen unterbrochen hat. Es muss auf andere Weise neu gemacht werden.
Bezüglich Ihres Problems sind hier die relevanten Codeblöcke:
Ich sehe keinen offensichtlichen Fehler, aber ich bin auch kein Ruby-Programmierer. Ich habe es auf unserer Instanz mit einer einzelnen und zwei E-Mail-Adressen in einer einfachen, durch Kommas getrennten CSV-Datei getestet, und es hat funktioniert. Es hat auch funktioniert, unabhängig davon, ob ich LF- oder CRLF-Dateiendungen verwendet habe, nur um einige gängige Probleme mit Dateiparsing auszuschließen. Wie erstellen Sie die CSV-Datei und sieht sie gut aus, wenn Sie sie in einem einfachen Texteditor wie Notepad, Nano, Vi oder einem anderen öffnen?
Super, danke für deine Hilfe. Das ist es, was ich wegen der MaxMind-Warnung dachte, aber ich hatte gestern nur kurz Zeit, es zu lesen, bevor ich mich abgemeldet habe.
Die CSV-Datei wird von Salesforce generiert und enthält jeweils eine E-Mail-Adresse pro Zeile, ohne Kommas oder Leerzeichen. Wenn ich sie in einen einfachen Texteditor einfüge, sieht sie völlig in Ordnung aus; keine zusätzlichen Zeichen oder etwas anderes. Ich habe es auch mit einer neuen CSV-Datei mit einer einzigen E-Mail-Adresse versucht und hatte denselben Fehler.
Streng genommen ist es dann keine CSV, was für “Comma-Separated Values” steht . Aber ich weiß, dass die Dateiendung auch mit anderen Trennzeichen weit verbreitet ist, und wichtiger noch, Zeilenumbrüche sind üblich als Trennzeichen für Datensätze, daher sollte eine E-Mail pro Zeile funktionieren, und … es funktioniert hier auch.
Tatsächlich habe ich gestern einen falschen Test gemacht, da ich zuerst meine gültige E-Mail und dann die ungültige zweite hinzugefügt habe. Ich dachte, es überspringt einfach nicht existierende E-Mails lautlos, aber tatsächlich analysiert es nur den ersten Eintrag jeder Zeile und erlaubt daher keine mehreren E-Mail-Adressen in jeder Zeile. Der Code macht dies sogar ziemlich deutlich:
line = CSV.parse_line(line).first&.strip
Und dann fügt es den gesamten line-Wert als einen E-Mail- oder Benutzernamen-Eintrag hinzu, um ihn abzugleichen.
Wenn ich mehrere E-Mails in jeweils eine Zeile einfüge, gemischt mit gültigen und ungültigen, zeigt es die korrekte Anzahl erfolgreich angewendeter Batches an und listet alle E-Mails auf, die nicht abgeglichen werden konnten. Wieder getestet mit Windows- und UNIX-Zeilenenden:
Mehrzeilig oder Mehrwertig ist jedoch sowieso nicht Ihr Problem, wenn es bei der allerersten E-Mail fehlschlägt, obwohl sie korrekt ist . Ich bin mir nicht sicher, wie man leicht debuggen kann, ohne die Discourse-Instanz neu zu erstellen. Verwenden Sie den offiziellen Docker-Image-Installer?
EDIT: Lol, die Bildunterschrift wurde von einer KI auf Deutsch hinzugefügt, zumindest hier in meinem deutschen Browser-Locale. Ziemlich detailliert und sehr korrekt .
Ich werde das mit unserem IT-Team überprüfen, sie haben es eingerichtet, daher bin ich mir nicht sicher, ob es sich um Docker handelt.
Außerdem ein etwas seltsames Update… Ich glaube, ich habe es gelöst, aber ich weiß nicht warum oder wie.
Hier ist meine aktuelle Kette von Ereignissen:
Die Originaldatei war eine .xlsx-Datei, die von Salesforce heruntergeladen wurde und die ich als CSV gespeichert habe – das hat meinem Testbenutzer keine Auszeichnung verliehen, funktionierte aber bei anderen.
Ich habe es mit nur einer E-Mail in einer neuen CSV-Datei getestet – das hat auch nicht funktioniert.
Ich habe ein paar Dinge versucht, um die Daten zu bereinigen – dabei habe ich den 502-Fehler bekommen und keine E-Mails wurden versendet. Ich glaube, ich habe hier irgendwie zusätzliche leere Felder oder etwas Seltsames hinzugefügt, das die Datei zu groß und nicht parsebar gemacht hat, daher der (neue) 502-Fehler.
Das Einfügen der E-Mails aus derselben CSV-Datei in eine frische, neue CSV-Datei scheint es gelöst zu haben – mein Testbenutzer hat die Auszeichnung erhalten!
… und vielleicht der seltsamste Teil, er ist der Einzige, dem die Auszeichnung fehlte?! Ich weiß nicht, ob ich dem voll und ganz glaube, denn es scheint unwahrscheinlich, dass dieses Problem nur seine E-Mail und keine andere betrifft. Wenn es einen Unterschied macht, war seine die allererste E-Mail in der Datei.
Toll, dass du es gelöst hast. Wahrscheinlich hat sich ein Sonderzeichen eingeschlichen, wie z. B. “test” und \"test\" hier auf Discourse, was zu unterschiedlichen doppelten Anführungszeichen führt, obwohl ich dieselben eingegeben habe.
Es gibt ein Limit von 50.000 Einträgen im Discourse-Code für diese CSV, wahrscheinlich kann dies mit einer Konfiguration überschrieben werden. Ich vermute jedoch, dass es keine 50.000 Zeilen gab? Wahrscheinlich hat der Parser selbst oder sogar der Webserver andere, niedrigere Größen-/Zeichenlimits.
Übrigens kannst du einfach eine neue CSV mit allen E-Mails (und dieser speziellen korrigierten) an die Massen-Badge übergeben und sie wird dir Ergebnisse anzeigen, als ob alles neu zugewiesen worden wäre. So kannst du überprüfen und sicherstellen, ob wirklich alle anderen sie erhalten haben.