Error: la devolución de llamada de membresía del grupo de Patreon falló para el nuevo usuario

Estoy configurando un servidor de Discourse con integración de Patreon. He recibido el siguiente mensaje de error cuando los Patrons se registran en 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'

El usuario se registra mediante autenticación de Patreon. El usuario se crea, Patreon aparece bajo Cuentas asociadas, pero los datos de Patreon (Monto, Recompensas) no se añaden a su perfil y no se les agrega al grupo. Si hago clic en Actualizar datos de Patreon y sincronizar grupos, entonces los datos aparecen y se les agrega al grupo correctamente.

No son Patrons nuevos. Han sido Patrons durante mucho tiempo y ahora es cuando se unen a Discourse.

Ahora estoy ejecutando la versión actual: 2.4.0.beta4. Está en mi propio servidor, pero es una instalación estándar.

Antes de actualizar a esta versión, desactivé el plugin y eliminé y volví a crear la Clave del cliente. (Un intento desesperado por resolver un problema que en realidad fue solucionado por la nueva versión…) Me pregunto si he “roto” la configuración relacionada con el grupo de Patrons de alguna manera, aunque parece extraño que la sincronización funcione, pero el registro de un nuevo usuario no.

Acabo de realizar una prueba con un usuario de prueba:

  1. Crear un usuario de prueba en Patreon, con una promesa a mi campaña. (Se activa el webhook, pero no creo que esto sea relevante, ya que el problema ocurre con Patrons “antiguos”.)
  2. Hacer clic en Actualizar datos de Patreon y sincronizar grupos, esperar el mensaje asíncrono de que los datos se han actualizado.
  3. Registrar el usuario de prueba en Discourse.
  4. Verificar los datos de Patreon para el usuario de prueba. No hay sección Patreon - Monto, Recompensas. El usuario no está incluido en el grupo de Patrons.
  5. Hacer clic en Actualizar datos de Patreon y sincronizar grupos, esperar el mensaje asíncrono de que los datos se han actualizado.
  6. Verificar los datos de Patreon para el usuario de prueba. La sección Patreon ahora está presente, con Monto y Recompensas. El usuario está incluido en el grupo de Patrons.

¡Gracias de antemano por cualquier ayuda!

¿Alguna opinión sobre esto, @vinothkannans?

He revisado un poco el código y vi que la funcionalidad de asignación de grupos se maneja en dos lugares:

  1. add_model_callback en plugin.rb, que se encarga del registro de un nuevo usuario individual.
  2. sync_groups en patron.rb, que se encarga de la sincronización por lotes de la pertenencia a grupos para todos los miembros.

Mi experiencia es que sync_groups funciona y add_model_callback no.

Noté que sync_groups incluye la siguiente línea:

next if group.nil?

¿Necesitamos la misma línea en add_model_callback? (Antes de la línea 166.)

Eso evitaría que se lance la excepción, pero no sé si haría que todo fuera correcto. No conozco el código ni el modelo de datos, así que es más bien una suposición.

3 Me gusta

Sí, tienes razón. Gracias por el informe. Se ha solucionado en el siguiente commit

2 Me gusta

¡Gracias, @vinothkannans!

3 Me gusta