大家好!
我有一个 CSV 文件中的电子邮件列表,我将授予他们徽章。我曾预计有一个组不会在我们的论坛上匹配(我使用的是活动所有与会者的列表,但并非所有人都拥有论坛帐户)。这似乎奏效了,许多人都匹配成功了——但我注意到有人本应获得徽章却未获得。
我再次用他的电子邮件地址在 CSV 文件中进行了测试,但仍然显示未匹配到现有用户。
我仔细检查了,他在论坛上的主要电子邮件地址确实与 CSV 文件中的地址相同。
有什么关于这里发生的事情的想法吗?
这是一个包含数千人的列表,所以我无法手动一一检查,很遗憾。
1 个赞
我可以为这一个例子做到这一点,但由于我有一个包含数千封电子邮件但没有用户名的列表,因此无法将其扩展到其他人。
我不这么认为——我尝试清理了数据,现在我收到了一个 502 错误 
Noah
6
您可以尝试查看日志?我不确定我是否能很好地帮助您解决这个问题,但我会尝试一下。
此时出现了这些错误……一个对我来说是新问题,需要解决 
我今天要下线了,但我找到了关于 MaxMindDB 的这个帖子,明天可以开始尝试调试这个问题 
1 个赞
另外,谢谢你的帮助!我不知道日志在哪里,所以这是个好学的知识!
这些警告与您的问题无关。未配置 MaxMind 许可证密钥的每个人都会看到它们。由于人们在遇到其他问题时浪费时间调查这些警告,我想将它们静音。但是,我的提交被撤销了,因为它破坏了其他一些 CI 测试和开发环境。需要用另一种方式重做。
关于您的问题,以下是相关的代码块:
我没有看到明显的错误,但我也不是 Ruby 程序员。我在我们的实例上使用单个和两个电子邮件地址的简单逗号分隔 CSV 进行了测试,它确实有效。无论我使用 LF 还是 CRLF 文件结尾,它都有效,只是为了排除一些常见的文件解析器问题。您是如何创建 CSV 文件的,当您在简单的文本编辑器(如记事本、nano、vi 等)中打开它时,它看起来正常吗?
太棒了,感谢您的帮助。这正是我对 MaxMind 警告的看法,但我昨天下线前只匆匆看了一眼。
CSV 文件由 Salesforce 生成,每行只有一个电子邮件地址,没有逗号或空格。当我将其粘贴到基本文本编辑器中时,它看起来完全没问题;没有任何额外的字符。我也尝试使用包含单个电子邮件地址的新 CSV 文件,但出现了相同的错误。
严格来说,这不算 CSV,因为 CSV 代表“逗号分隔值”
。但我知道该文件扩展名也广泛用于其他分隔符,更重要的是,换行符通常用作数据集分隔符,因此每行一个电子邮件应该可以工作,而且……它在这里确实可以工作。
实际上,我昨天做了一个错误的测试,因为我先添加了有效的电子邮件,然后是无效的第二封。我以为它只是默默地跳过不存在的电子邮件,但实际上它只解析每行的第一个条目,因此不允许每行有多个电子邮件地址。代码实际上对此非常清楚:
line = CSV.parse_line(line).first&.strip
然后它将整个 line 值添加为一个电子邮件或用户名条目进行匹配。
当我每行添加多个电子邮件时,混合有效和无效的电子邮件,它会显示成功应用的批次数,并列出所有无法匹配的电子邮件。再次使用 Windows 和 UNIX 行尾进行了测试:
无论如何,多行或多值都不是您的问题,如果它在第一个电子邮件上就失败了,即使它是正确的
。不确定如何在不重建 Discourse 实例的情况下轻松调试。您使用的是官方 Docker 镜像安装程序吗?
编辑:哈哈,图像标题是由某个人工智能添加的,语言是德语,至少在我本地的德语浏览器中是这样。相当详细,而且非常正确
。
今天我学到了!
我会与我们的 IT 团队仔细核对,是他们设置的,所以我不太确定它是否在 Docker 上。
另外,一个有点奇怪的更新……我想我解决了,但不知道为什么或如何。 
这是我目前的一系列事件:
- 原始文件是从 Salesforce 下载的 .xlsx 文件,我将其另存为 CSV——这没有授予我的测试用户,但对其他人有效。
- 我在新的 CSV 文件中只测试了一个电子邮件——这也不起作用。
- 我尝试了一些清理数据的方法——这时我开始收到 502 错误,并且没有电子邮件发送出去。我认为我可能以某种方式添加了额外的空字段或其他奇怪的东西,导致文件过大而无法解析,从而导致(新的)502 错误。
- 将来自同一 CSV 的电子邮件粘贴到一个新的、干净的 CSV 文件中似乎解决了问题——我的测试用户获得了徽章!

…而且可能最奇怪的部分是,他是唯一一个缺少徽章的人?!我不太相信这一点,因为这个问题似乎不太可能只影响他的电子邮件而不影响其他任何人。如果这有影响,他的电子邮件是文件中的第一封电子邮件。
否则,也许他只是被诅咒了? 
2 个赞
太好了,你解决了这个问题。可能是某些特殊字符混入其中,比如在 Discourse 中像 "test" 和 \"test\" 这样,尽管我输入的是相同的。
Discourse 代码中 CSV 条目有 50,000 条的限制,这可能可以通过配置覆盖。不过,我猜你那里并没有 50,000 行吧?可能是解析器本身,甚至是 Web 服务器,有其他更低的尺寸/字符限制。
顺便说一下,你可以直接将包含所有电子邮件(以及这个已更正的特定邮件)的新 CSV 文件传递给批量徽章工具,它会显示结果,就像所有内容都已重新分配一样。这样你就可以检查并确保其他所有人都确实获得了徽章。