エラー:新規ユーザーのPatreonグループメンバーシップコールバックに失敗しました

Discourse サーバーを Patreon 連携付きで設定している最中です。Patron が 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'

ユーザーは Patreon 認証を使って登録します。ユーザーは作成され、Associated Accounts に Patreon が表示されますが、Patreon のデータ(金額、リワード)はプロフィールに追加されず、グループにも追加されません。Update Patreon Data & Sync Groups をクリックすると、データが表示され、グループへの追加も正常に行われます。

彼らは新規の Patron ではなく、長期間 Patron として活動しており、Discourse への参加は今回が初めてです。

現在、最新バージョンの 2.4.0.beta4 を実行しています。これは独自サーバーですが、標準的なインストールです。

このバージョンに更新する前に、プラグインを無効化し、Client Key を削除して再作成しました(実際には新バージョンで解決された問題を解消するための必死の試みでしたが)。Patreon グループ周りの設定を何らかの形で壊してしまったのではないかと思いますが、同期は機能するのに、新規ユーザーの登録が機能しないのは奇妙に思えます。

テストユーザーを使ってテストを行いました:

  1. Patreon でテストユーザーを作成し、キャンペーンへの支援を行う。(Webhook はトリガーされますが、この問題は「既存の」Patron で発生するため、これは関係ないと思います。)
  2. Update Patreon Data & Sync Groups をクリックし、データが更新されたことを示す非同期メッセージを待つ。
  3. Discourse でテストユーザーを登録する。
  4. テストユーザーの Patreon データを確認する。Patreon セクション(金額、リワード)が存在しない。ユーザーは Patreon グループに含まれていない。
  5. Update Patreon Data & Sync Groups をクリックし、データが更新されたことを示す非同期メッセージを待つ。
  6. テストユーザーの Patreon データを確認する。Patreon セクションが現在表示され、金額とリワードが含まれている。ユーザーは Patreon グループに含まれている。

ご支援いただき、ありがとうございます!

@vinothkannans さん、ご意見はいかがでしょうか?

コードを少し確認したところ、グループ割り当て機能は以下の 2 箇所で処理されていることがわかりました:

  1. plugin.rbadd_model_callback:新規ユーザー 1 人の登録を処理します。
  2. patron.rbsync_groups:すべてのメンバーのグループ所属をバッチで同期します。

私の経験では、sync_groups は機能しますが、add_model_callback は機能しません。

sync_groups には以下の行が含まれていることに気づきました:

next if group.nil?

add_model_callback にも同じ行が必要でしょうか?(166 行目の前です。)

これにより例外が投げられるのを防げるかもしれませんが、すべてが正しくなるかどうかはわかりません。コードやデータモデルを知らないため、これはほとんど推測にすぎません。

「いいね!」 3

はい、その通りです。ご報告ありがとうございます。以下のコミットで修正済みです。

「いいね!」 2

ありがとうございます、@vinothkannans さん!

「いいね!」 3