Concessão em massa de distintivos não está funcionando?

Olá a todos!

Tenho uma lista de e-mails em um arquivo CSV para os quais estou concedendo um distintivo. Eu esperava que um grupo não fosse correspondido em nosso fórum (estou usando a lista de todos os participantes de um evento, e nem todos eles têm uma conta no fórum). Parecia funcionar, muitos foram correspondidos sem problemas – mas notei que alguém que deveria ter recebido um não recebeu.

Eu testei novamente com apenas o endereço de e-mail dele em um CSV, e ele ainda apareceu como não correspondendo a um usuário existente.

Eu verifiquei novamente e o e-mail principal dele no fórum é, de fato, o mesmo do CSV.

Alguma ideia do que está acontecendo aqui? :thinking:

É uma lista de vários milhares de pessoas, então infelizmente não posso verificar tudo manualmente.

1 curtida

Tente o nome de usuário em vez do e-mail.

Eu poderia fazer isso para este exemplo, mas como tenho uma lista de milhares de e-mails e não nomes de usuário, isso não escalaria para todos os outros.

Seu arquivo csv possui caracteres invisíveis ou artefatos?

Eu acho que não – tentei limpar os dados e agora estou recebendo um erro 502 :sweat_smile:

Você pode tentar verificar os logs? Não tenho certeza se sou a pessoa mais adequada para te ajudar com isso, mas vou tentar.:person_shrugging:

Estes são os erros que ele tem naquele momento… um problema novo para eu resolver :lolsob:

Estou prestes a encerrar o dia, mas encontrei este tópico sobre MaxMindDB para começar a tentar depurar isso amanhã :person_shrugging:

1 curtida

Além disso, obrigado pela ajuda! Eu não sabia onde estavam os logs, então é bom aprender!

Estes avisos não estão relacionados ao seu problema. Todos que não configuraram uma chave de licença MaxMind os veem. Como as pessoas estão perdendo tempo investigando esses avisos quando enfrentam outros problemas, eu queria silenciá-los. No entanto, meu commit foi revertido, pois quebrou outros testes de CI e ambientes de desenvolvimento. Precisa ser refeito de outra forma.

Em relação ao seu problema, aqui estão os blocos de código relevantes:

Não vejo nenhum bug óbvio, mas também não sou programador Ruby. Testei em nossa instância com um e dois endereços de e-mail em um CSV simples separado por vírgulas, e funcionou. Funcionou também, independentemente de eu usar finais de linha LF ou CRLF, apenas para descartar alguns problemas comuns de análise de arquivos. Como você cria o arquivo CSV e ele parece bom quando você o abre em um editor de texto simples, como notepad, nano, vi, o que for?

Incrível, obrigado pela ajuda. Era o que eu estava pensando sobre o aviso do MaxMind, mas só tive tempo de ler brevemente antes de sair ontem.

O arquivo CSV é gerado pelo Salesforce e tem um endereço de e-mail em cada linha, sem vírgulas ou espaços. Quando eu o colo em um editor de texto básico, parece totalmente normal; sem caracteres extras ou qualquer coisa. Eu também tentei com um novo CSV com um único endereço de e-mail e tive o mesmo erro.

Estritamente falando, não é um CSV então, que significa “valores separados por vírgula” :wink:. Mas eu sei que a extensão do arquivo é amplamente usada também com outros separadores, e mais importante, quebras de linha são comuns como separador de conjunto de dados, então um e-mail por linha deve funcionar, e … funciona aqui.

Na verdade, eu fiz um teste errado ontem, pois adicionei meu e-mail válido primeiro e o inválido em segundo. Eu pensei que ele simplesmente ignorava e-mails inexistentes silenciosamente, mas na verdade ele analisa apenas a primeira entrada de cada linha, portanto não permite múltiplos endereços de e-mail em cada linha. O código na verdade deixa isso bem claro:

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

E então ele adiciona todo o valor line como um e-mail ou entrada de nome de usuário para corresponder.

Quando eu adiciono múltiplos e-mails em uma linha cada, misturando válidos e inválidos, ele mostra o número correto de lotes aplicados com sucesso, e lista todos os e-mails que não puderam ser correspondidos. Novamente testado com finais de linha do Windows e UNIX:

Multi-linha ou multi-valor, no entanto, não é o seu problema, se falhar no primeiro e-mail, apesar de estar correto :thinking:. Não sei como depurar facilmente sem reconstruir a instância do Discourse. Você usa o instalador oficial da imagem Docker?

EDIT: Lol, a legenda da imagem foi adicionada por alguma IA, em alemão, pelo menos aqui no meu navegador com localidade alemã. Bastante detalhada, e muito correta :smile:.

Hoje eu aprendi!

Vou verificar com nossa equipe de TI, eles que configuraram, então não tenho certeza se está no Docker.

Além disso, uma atualização um tanto estranha… Acho que resolvi, mas não faço ideia de como ou por quê. :sweat_smile:

Aqui está minha sequência atual de eventos:

  1. O arquivo original era um arquivo .xlsx baixado do Salesforce, que salvei como CSV – isso não concedeu ao meu usuário de teste, mas funcionou com outros.
  2. Testei com apenas um e-mail em um CSV novo – isso também não funcionou.
  3. Tentei algumas coisas para limpar os dados – foi quando comecei a receber o erro 502 e nenhum e-mail estava sendo enviado. Acho que posso ter adicionado campos vazios extras ou algo estranho aqui que tornou o arquivo muito grande e impossível de ser analisado, daí o (novo) erro 502.
  4. Colar os e-mails do mesmo CSV em um CSV novo e fresco parece ter resolvido – meu usuário de teste recebeu o distintivo! :tada:

… e possivelmente a parte mais estranha, ele é o único que estava sem o distintivo?! Não sei se acredito totalmente nisso, porque parece improvável que esse problema afete apenas o e-mail dele e mais ninguém. Se fizer diferença, o dele foi o primeiro e-mail no arquivo.

Caso contrário, talvez ele esteja apenas amaldiçoado? :lolsob:

2 curtidas

Ótimo que você resolveu. Provavelmente algum caractere especial se infiltrou, como “test” e \"test\" aqui no discourse, resultando em diferentes caracteres de aspas duplas, apesar de eu ter inserido o mesmo.

Existe um limite de 50.000 entradas no código do Discourse para este CSV, provavelmente pode ser substituído com configuração. No entanto, eu acho que não havia 50.000 linhas? Provavelmente o próprio parser, ou mesmo o servidor web, têm outros limites menores de tamanho/caracteres.

Aliás, você pode simplesmente passar um novo CSV com todos os e-mails (e este em particular corrigido) para o distintivo em massa e ele mostrará os resultados como se tudo tivesse sido recém-atribuído. Assim, você pode verificar e garantir se realmente todos os outros o receberam.