Ho un elenco di email in un file CSV a cui sto assegnando un badge. Mi aspettavo che un gruppo non venisse abbinato sul nostro forum (sto usando l’elenco di tutti i partecipanti a un evento e non tutti hanno un account sul forum). Sembrava funzionare, molti sono stati abbinati correttamente, ma ho notato che qualcuno che avrebbe dovuto riceverlo non l’aveva fatto.
L’ho testato di nuovo con solo il suo indirizzo email in un CSV, e ancora è risultato non corrispondente a un utente esistente.
Questi avvisi non sono correlati al tuo problema. Tutti coloro che non hanno configurato una chiave di licenza MaxMind li vedono. Poiché le persone perdono tempo a indagare su questi avvisi, quando affrontano altri problemi, volevo silenziarli. Tuttavia, il mio commit è stato annullato, poiché ha interrotto altri test CI e ambienti di sviluppo. Deve essere rifatto in un altro modo.
Per quanto riguarda il tuo problema, ecco i blocchi di codice pertinenti:
Non vedo alcun bug evidente, ma non sono nemmeno un programmatore Ruby. L’ho testato sulla nostra istanza con uno e due indirizzi email in un semplice CSV separato da virgole, e ha funzionato. Ha anche funzionato, indipendentemente dal fatto che utilizzassi terminazioni di riga LF o CRLF, solo per escludere alcuni problemi comuni di parser di file. Come crei il file CSV e sembra a posto quando lo apri in un semplice editor di testo, come notepad, nano, vi, qualunque cosa?
Fantastico, grazie per il tuo aiuto. Era quello che pensavo riguardo all’avviso di MaxMind, ma ho avuto solo il tempo di leggere brevemente prima di disconnettermi ieri.
Il file CSV viene generato da Salesforce e contiene un indirizzo email per riga, senza virgole o spazi. Quando lo incollo in un editor di testo di base, sembra perfettamente a posto; nessun carattere extra o altro. Ho anche provato con un nuovo CSV con un singolo indirizzo email e ho ottenuto lo stesso errore.
Strettamente parlando, non è un CSV, che sta per “comma-separated values” . Ma so che l’estensione del file è ampiamente utilizzata anche con altri separatori, e soprattutto, le interruzioni di riga sono comuni come separatori di set di dati, quindi un’email per riga dovrebbe funzionare, e… funziona qui.
In realtà, ieri ho fatto un test sbagliato, poiché ho aggiunto prima la mia email valida e poi quella non valida. Pensavo che saltasse silenziosamente le email inesistenti, ma in realtà analizza solo la prima voce di ogni riga, quindi non consente più indirizzi email per riga. Il codice lo rende abbastanza chiaro:
line = CSV.parse_line(line).first&.strip
E poi aggiunge l’intero valore line come una singola voce email o nome utente da abbinare.
Quando aggiungo più email per riga, mescolando quelle valide e non valide, mostra il numero corretto di batch applicati con successo e elenca tutte le email che non hanno potuto essere abbinate. Testato nuovamente con interruzioni di riga Windows e UNIX:
Tuttavia, il multi-riga o multi-valore non è comunque il tuo problema, se fallisce alla primissima email nonostante sia corretta . Non sono sicuro di come eseguire facilmente il debug senza ricostruire l’istanza di Discourse. Stai usando l’installer ufficiale dell’immagine Docker?
EDIT: Lol, la didascalia dell’immagine è stata aggiunta da qualche KI, in lingua tedesca, almeno qui nel mio browser in lingua tedesca. Abbastanza dettagliata e molto corretta .
Doppio controllo con il nostro team IT, sono loro che l’hanno configurato, quindi non sono esattamente sicuro se sia su Docker.
Inoltre, un aggiornamento piuttosto strano… Penso di averlo risolto, ma non ho idea di come o perché.
Ecco la mia attuale catena di eventi:
Il file originale era un file .xlsx scaricato da Salesforce, che ho salvato come CSV – questo non ha assegnato il mio utente di test, ma ha funzionato con altri.
Ho testato con una sola email in un nuovo CSV – anche questo non ha funzionato.
Ho provato alcune cose per ripulire i dati – è stato allora che ho iniziato a ricevere l’errore 502 e nessuna email veniva inviata. Penso di aver in qualche modo aggiunto campi vuoti extra o qualcosa di strano qui che ha reso il file troppo grande e non analizzabile, da qui il (nuovo) errore 502.
Incollare le email dallo stesso CSV in un nuovo CSV sembra aver risolto il problema – il mio utente di test ha ricevuto il badge!
… e forse la parte più strana, è l’unico a cui mancava il badge?! Non so se ci credo del tutto, perché sembra improbabile che questo problema abbia interessato solo la sua email e nessun altro. Se fa differenza, la sua era la primissima email nel file.
Ottimo che tu l’abbia risolto. Probabilmente qualche carattere speciale si è intrufolato, come “test” e \"test\" qui su discourse, risultando in diversi caratteri di virgolette doppie, nonostante io abbia inserito gli stessi.
C’è un limite di 50.000 voci nel codice di Discourse per questo CSV, probabilmente può essere sovrascritto con la configurazione. Tuttavia, immagino che non ci fossero 50.000 righe? Probabilmente il parser stesso, o anche il webserver, hanno altri limiti inferiori di dimensione/caratteri.
A proposito, puoi semplicemente passare un nuovo CSV con tutte le email (e questa in particolare corretta) a bulk badge e ti mostrerà i risultati come se tutto fosse stato appena assegnato. Così puoi controllare e assicurarti se davvero tutti gli altri l’hanno ricevuto.