これはこのサイトだけの問題だと仮定してよいですか?他のサイトではこの問題は発生していませんか?はい、「バグ」があり、500を返すべきではないのですが、おそらくプランが見つからないなど、「不正な」データがどこかにあるのでしょう。Stripeで削除されたのに、プラグインのデータベースでは更新されなかったのかもしれません。
デバッグのために、これらのRailsコンソールコマンドを実行していただけますか?
Stripe.api_key = SiteSetting.discourse_subscriptions_secret_key
user = User.find_by(username: 'xxx')
customer = DiscourseSubscriptions::Customer.find_by(user_id: user.id)
subs = ::Stripe::Subscription.list(customer: stripe_customer_id, status: 'all')[:data]
subs.count # サブスクリプションの数を数える
subscription = subs.first # これを変更し、各サブスクリプションに対して以下の行を実行する
price_id = subscription[:items][:data].first[:price][:id]
plans = ::Stripe::Price.list(expand: ['data.product'], limit: 100)
plan = plans[:data].find { |p| p[:id] == price_id }
plan
プランまたはプランがnilを返すのではないかと考えていますが、これで問題の箇所を特定するのに役立ちます。サブスクリプションがいくつあり、プランが見つからないものがあるかどうか教えていただけますか?
おそらくコードの修正として、エラーが発生した場合はこれらのユーザーのサブスクリプションを返さないようにするでしょうが、実際にサブスクリプションがあるのに問題を解決しないのは良くありません。おそらく、「サブスクリプションが見つかりましたが、プランの詳細を読み込む際にエラーが発生しました。管理者に連絡してください」のようなエラーを返すようにするでしょう。