CSV 파일에 이메일 목록이 있고, 이 목록에 있는 사용자들에게 배지를 수여하려고 합니다. 우리 포럼에서 매칭되지 않는 그룹이 있을 것으로 예상했습니다. (이벤트 참석자 전체 목록을 사용 중인데, 모든 참석자가 포럼 계정을 가진 것은 아니기 때문입니다.) 처음에는 잘 작동하는 것처럼 보였고, 많은 사용자들이 정상적으로 매칭되었습니다. 그런데 배지를 받아야 할 한 사람이 배지를 받지 못한 것을 발견했습니다.
해당 사용자의 이메일 주소만 CSV에 넣고 다시 테스트해 보았지만, 여전히 기존 사용자와 매칭되지 않는다고 표시됩니다.
이 경고들은 질문하신 문제와 무관합니다. MaxMind 라이선스 키를 설정하지 않은 모든 사용자에게 이 경고가 표시됩니다. 다른 문제를 겪고 있을 때 이 경고들을 조사하는 데 시간을 낭비하는 경우가 많아서, 경고음을 끄고자 했습니다. 그러나 제 커밋은 다른 CI 테스트와 개발 환경을 깨뜨렸기 때문에 되돌려졌으며, 다른 방식으로 다시 구현해야 합니다.
명백한 버그는 보이지 않지만, 저도 Ruby 프로그래머는 아닙니다. 단일 이메일 주소와 쉼표로 구분된 단순한 CSV에 두 개의 이메일 주소를 넣어서 우리 인스턴스에서 테스트해 보았으며, 정상적으로 작동했습니다. 일반적인 파일 파서 문제를 배제하기 위해 LF 또는 CRLF 파일 종료 부호를 사용하든 관계없이 모두 정상 작동했습니다. CSV 파일을 어떻게 생성하시나요? 메모장, nano, vi 등 간단한 텍스트 편집기로 파일을 열었을 때 정상적으로 보이는지 확인해 보셨나요?
정말 감사합니다. 도움을 주셔서 감사합니다. 어제 MaxMind 경고에 대해 제가 생각했던 내용과 일치하는데, 어제 로그아웃하기 전에 시간 관계상 간단히만 읽었습니다.
해당 CSV 파일은 Salesforce에서 생성된 것으로, 각 줄에 이메일 주소가 하나씩 들어 있고 쉼표나 공백은 없습니다. 기본 텍스트 편집기에 붙여넣으면 아무 문제 없이 정상적으로 보입니다. 추가 문자 같은 것도 없고요. 또한 단일 이메일 주소만 포함된 새로운 CSV 파일로 시도해 보았지만 동일한 오류가 발생했습니다.
엄밀히 말하면, CSV는 "쉼표로 구분된 값(comma-separated values)"을 의미하므로 CSV라고 보기 어렵습니다 . 하지만 파일 확장자가 다른 구분자에도 널리 사용된다는 점은 알고 있으며, 무엇보다 줄바꿈이 데이터셋 구분자로 흔히 사용되므로 한 줄에 이메일 하나씩 배치하는 방식이 작동할 것 같았고, 실제로 여기서는 작동합니다.
사실 어제 잘못된 테스트를 수행했습니다. 유효한 이메일을 먼저 추가하고 무효한 이메일을 두 번째로 추가했었기 때문입니다. 존재하지 않는 이메일은 조용히 건너뛰는 줄 알았는데, 실제로는 각 줄의 첫 번째 항목만 파싱하여 한 줄에 여러 이메일 주소를 허용하지 않는다는 것을 깨달았습니다. 코드가 이를 꽤 명확하게 보여줍니다:
line = CSV.parse_line(line).first&.strip
그리고 나서 line 값 전체를 하나의 이메일 또는 사용자 이름 항목으로 추가하여 매칭을 수행합니다.
유효한 이메일과 무효한 이메일을 섞어서 한 줄에 여러 개를 추가했을 때, 성공적으로 적용된 배치의 정확한 수를 표시하고, 매칭되지 않은 모든 이메일을 나열했습니다. 다시 한번 Windows 및 UNIX 줄 끝 문자로 테스트했습니다:
IT 팀과 다시 확인해 보겠습니다. 그분들이 설정을 담당했기 때문에 Docker에서 실행 중인지 정확히 확신할 수 없습니다.
그리고 다소 이상한 업데이트가 있습니다… 해결한 것 같지만, 왜, 어떻게 해결된 건지 전혀 모르겠습니다.
현재까지의 경과를 정리하면 다음과 같습니다:
원래 파일은 Salesforce에서 다운로드한 .xlsx 파일이었는데, 이를 CSV로 저장했습니다 – 이 방법은 테스트 사용자에게 배지를 부여하지는 못했지만, 다른 사용자들에게는 잘 작동했습니다.
새 CSV 파일에 이메일 하나만 넣고 테스트해 보았지만 – 이것도 작동하지 않았습니다.
데이터를 정리하기 위해 몇 가지 시도를 했습니다 – 이때부터 502 에러가 발생하기 시작했고, 이메일이 전송되지 않았습니다. 아마도 여기서 추가적인 빈 필드나 이상한 요소가 들어갔는지 모르겠지만, 파일이 너무 커져 파싱이 불가능해졌고, 그 결과 (새로운) 502 에러가 발생한 것 같습니다.
해당 CSV에서 이메일을 복사해서 완전히 새로운 CSV 파일에 붙여넣은 것이 해결책이 된 것 같습니다 – 이제 제 테스트 사용자에게 배지가 정상적으로 부여되었습니다!
… 그리고 아마도 가장 이상한 부분은, 배지가 없었던 사람이 그 사람뿐이라는 점입니다! 이 문제가 그의 이메일에만 영향을 미치고 다른 사람의 이메일에는 영향을 미치지 않는다는 것이 믿기지가 않습니다. 만약 차이가 있다면, 그의 이메일은 파일에서 가장 첫 번째 이메일이었습니다.