이것은 해당 사이트에서만 발생하는 문제인 것 같습니다. 다른 사이트에서는 이런 현상이 나타나지 않나요? 500 에러를 반환해서는 안 되는 "버그"가 있는 것은 맞지만, 플랜 누락과 같은 어딘가에 “잘못된” 데이터가 존재할 가능성이 큽니다. 아마도 Stripe에서 데이터가 삭제되었지만 플러그인 데이터베이스에서는 업데이트되지 않았을 수 있습니다.
디버깅을 돕기 위해 다음 rails console 명령어를 실행해 주시겠어요?
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
plans 또는 plan 중 하나가 nil을 반환할 것 같지만, 이렇게 하면 문제가 어디에 있는지 좁혀 나가는 데 도움이 될 것입니다. 사용자가 몇 개의 구독을 가지고 있는지, 그리고 누락된 플랜이 있는지 알려주시겠어요?
제가 만들 코드 수정 사항은 에러가 발생하면 해당 사용자의 구독을 반환하지 않는 것일 수 있지만, 실제로 구독이 있는 경우라면 이는 문제를 근본적으로 해결하지 못합니다. 아마도 "구독은 발견되었지만 플랜 세부 정보를 불러오는 중 오류가 발생했습니다. 관리자에게 문의해 주세요."와 같은 오류 메시지를 반환하도록 할 것입니다.