Estou assumindo que é apenas para este site? Você não está vendo isso em outros sites? Sim, existe um “bug” onde não deveríamos retornar um 500, mas provavelmente há alguns dados “ruins” em algum lugar, como um plano ausente ou algo assim. Talvez tenha sido removido no Stripe e nunca tenha sido atualizado no banco de dados do plugin.
Você pode executar estes comandos do console Rails para me ajudar a depurar?
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 # observe quantos assinaturas eles têm
subscription = subs.first # mude isso e execute as linhas abaixo para cada sub
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
Estou pensando que ou plans ou plan retornarão nil, mas isso nos ajudará a identificar onde está o problema. Você poderia me dizer quantas assinaturas eles têm e se há planos ausentes para eles?
Provavelmente uma correção de código que farei é simplesmente não retornar nenhuma assinatura para esses usuários se houver um erro, mas se eles realmente tiverem uma assinatura, isso não resolverá o problema. Talvez eu faça com que retorne um erro dizendo algo como “uma assinatura foi encontrada, mas há um erro ao carregar os detalhes do plano para ela, entre em contato com um administrador para obter ajuda”.