Erro: callback de associação ao grupo Patreon falhou para novo usuário

Estou apenas configurando um servidor Discourse com integração ao Patreon. Recebi a seguinte mensagem de erro quando apoiadores (Patrons) se cadastram no Discourse:

Patreon group membership callback failed for new user 7 with error: 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'

O usuário se registra usando autenticação do Patreon. O usuário é criado, o Patreon aparece em Contas Associadas, mas os dados do Patreon (Valor, Recompensas) não são adicionados ao perfil dele, e ele não é adicionado ao grupo. Se eu clicar em Atualizar Dados do Patreon e Sincronizar Grupos, os dados aparecem e ele é adicionado ao grupo com sucesso.

Eles não são novos apoiadores. São apoiadores há muito tempo e só agora estão entrando no Discourse.

Agora estou executando a versão atual - 2.4.0.beta4. Está no meu próprio servidor, mas é uma instalação padrão.

Antes de atualizar para esta versão, desativei o plugin e excluí e recriei a Chave do Cliente. (Uma tentativa desesperada de resolver um problema que na verdade foi corrigido pela nova versão…) Estou me perguntando se “quebrei” a configuração em torno do grupo de apoiadores de alguma forma, embora pareça estranho que a Sincronização funcione, mas o registro de um novo usuário não.

Acabei de fazer um teste usando um usuário de teste:

  1. Criar usuário de teste no Patreon, com promessa de contribuição para minha campanha. (O Webhook é acionado, mas acho que isso não é relevante, já que o problema ocorre com apoiadores “antigos”.)
  2. Clicar em Atualizar Dados do Patreon e Sincronizar Grupos, aguardar a mensagem assíncrona de que os dados foram atualizados.
  3. Registrar usuário de teste no Discourse.
  4. Verificar os dados do Patreon para o usuário de teste. Nenhuma seção Patreon - Valor, Recompensas. Usuário não incluído no grupo de apoiadores.
  5. Clicar em Atualizar Dados do Patreon e Sincronizar Grupos, aguardar a mensagem assíncrona de que os dados foram atualizados.
  6. Verificar os dados do Patreon para o usuário de teste. A seção Patreon agora está presente, com Valor e Recompensas. O usuário está incluído no grupo de apoiadores.

Obrigado antecipadamente por qualquer ajuda!

Alguma opinião sobre isso @vinothkannans?

Eu explorei um pouco o código e vi que a funcionalidade de atribuição de grupos é tratada em dois locais:

  1. add_model_callback em plugin.rb, que gerencia o registro de um único novo usuário.
  2. sync_groups em patron.rb, que gerencia a sincronização em lote da associação a grupos para todos os membros.

Minha experiência é que o sync_groups funciona, mas o add_model_callback não.

Notei que o sync_groups inclui a seguinte linha:

next if group.nil?

Precisamos da mesma linha no add_model_callback? (Antes da linha 166.)

Isso impediria que a exceção fosse lançada, mas não sei se tornaria tudo correto. Não conheço o código nem o modelo de dados, então é praticamente um palpite.

3 curtidas

Sim, você está correto. Obrigado pelo relatório. Isso foi corrigido no commit abaixo

2 curtidas

Obrigado, @vinothkannans!

3 curtidas