错误:Patreon 群组会员回调对新用户失败

我正在配置一个带有 Patreon 集成的 Discourse 服务器。当 Patreon 支持者注册 Discourse 时,我收到了以下错误消息:

Patreon 组成员身份回调失败,新用户 7 报错:undefined method `add' for nil:NilClass。
/var/www/discourse/plugins/discourse-patreon/plugin.rb:166:in `block (3 levels) in activate!'
/var/www/discourse/plugins/discourse-patreon/plugin.rb:164:in `each'
/var/www/discourse/plugins/discourse-patreon/plugin.rb:164:in `block (2 levels) in activate!'
/var/www/discourse/lib/plugin/instance.rb:215:in `public_send'
/var/www/discourse/lib/plugin/instance.rb:215:in `block (2 levels) in add_model_callback'

用户通过 Patreon 认证进行注册。用户已创建,Patreon 显示在“关联账户”下,但其 Patreon 数据(金额、奖励)未添加到个人资料中,且未被添加到群组。如果我点击“更新 Patreon 数据并同步群组”,数据就会显示出来,并且他们也能成功加入群组。

这些用户并非新支持者。他们已经是长期的 Patreon 支持者,只是现在才加入 Discourse。

我现在运行的是当前版本 2.4.0.beta4。这是在我的自有服务器上,但属于标准安装。

在更新到此版本之前,我曾停用该插件,并删除并重新创建了客户端密钥。(这是为了解决一个实际上由新版本修复的问题而做的绝望尝试……)我怀疑我是否以某种方式“破坏”了关于支持者群组的配置,尽管同步能正常工作,但注册新用户却不行,这确实很奇怪。

我刚刚用测试用户做了一个测试:

  1. 在 Patreon 中创建测试用户,并向我的活动进行pledge。(Webhook 被触发,但我认为这与问题无关,因为问题出现在“旧”支持者身上。)
  2. 点击“更新 Patreon 数据并同步群组”,等待异步消息提示数据已更新。
  3. 在 Discourse 中注册测试用户。
  4. 检查测试用户的 Patreon 数据。没有 Patreon 部分——金额、奖励。用户未包含在支持者群组中。
  5. 点击“更新 Patreon 数据并同步群组”,等待异步消息提示数据已更新。
  6. 检查测试用户的 Patreon 数据。Patreon 部分现在已存在,包含金额和奖励。用户已包含在支持者群组中。

提前感谢任何帮助!

@vinothkannans,对此有什么看法?

我稍微查看了一下代码,发现群组分配功能在两个地方处理:

  1. plugin.rb 中的 add_model_callback,负责注册单个新用户。
  2. patron.rb 中的 sync_groups,负责对所有成员进行群组归属的批量同步。

根据我的经验,sync_groups 能正常工作,而 add_model_callback 则不行。

我注意到 sync_groups 中包含以下代码行:

next if group.nil?

我们是否需要在 add_model_callback 中也加入相同的代码行?(在第 166 行之前。)

这样做可以阻止异常抛出,但我不知道这是否能确保一切正常。由于我不熟悉代码和数据模型,这很大程度上只是猜测。

3 个赞

是的,你说得对。感谢你的反馈。这已在下面的提交中修复:

2 个赞

谢谢,@vinothkannans

3 个赞