Ошибка: сбой обратного вызова членства в группе Patreon для нового пользователя

Я только что настраиваю сервер Discourse с интеграцией Patreon. При регистрации пользователей через Patreon я получаю следующее сообщение об ошибке:

Ошибка обратного вызова членства в группе 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 и синхронизировать группы», данные появляются, и пользователь успешно добавляется в группу.

Это не новые спонсоры. Они поддерживают проект уже давно и только сейчас присоединяются к Discourse.

Сейчас я использую текущую версию — 2.4.0.beta4. Сервер собственный, установка стандартная.

Перед обновлением до этой версии я деактивировал плагин, удалил и создал заново ключ клиента. (Отчаянная попытка решить проблему, которая на самом деле была исправлена в новой версии…) Интересно, не сломал ли я как-то конфигурацию группы спонсоров, хотя странно, что синхронизация работает, а регистрация нового пользователя — нет.

Только что провёл тест с тестовым пользователем:

  1. Создал тестового пользователя в Patreon с подпиской на мою кампанию. (Вебхук срабатывает, но, думаю, это не важно, так как проблема возникает со «старыми» спонсорами.)
  2. Нажал «Обновить данные Patreon и синхронизировать группы», дождался асинхронного сообщения об обновлении данных.
  3. Зарегистрировал тестового пользователя в Discourse.
  4. Проверил данные Patreon для тестового пользователя. Раздела Patreon нет — нет суммы, наград. Пользователь не включён в группу спонсоров.
  5. Снова нажал «Обновить данные Patreon и синхронизировать группы», дождался асинхронного сообщения об обновлении данных.
  6. Проверил данные Patreon для тестового пользователя. Раздел Patreon теперь есть, с суммой и наградами. Пользователь включён в группу спонсоров.

Заранее спасибо за любую помощь!

Есть какие-то мысли по этому поводу, @vinothkannans?

Я немного покопался в коде и заметил, что функциональность назначения групп обрабатывается в двух местах:

  1. add_model_callback в plugin.rb, который отвечает за регистрацию одного нового пользователя.
  2. sync_groups в patron.rb, который отвечает за пакетную синхронизацию членства в группах для всех участников.

По моему опыту, sync_groups работает, а add_model_callback — нет.

Я заметил, что в sync_groups есть следующая строка:

next if group.nil?

Нужна ли нам такая же строка в add_model_callback? (Перед строкой 166.)

Это остановило бы выброс исключения, но я не знаю, сделает ли это всё корректным. Я не знаком с кодом или моделью данных, так что это скорее догадка.

3 лайка

Да, вы правы. Спасибо за сообщение. Это исправлено в следующем коммите

2 лайка

Спасибо, @vinothkannans!

3 лайка