Я предполагаю, что проблема касается только этого сайта? Вы не видите этого на других сайтах? Да, есть «баг», из-за которого мы не должны возвращать ошибку 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
Я думаю, что либо plans, либо plan вернёт nil, но это поможет нам сузить круг поиска проблемы. Не могли бы вы сообщить, сколько у них подписок и есть ли у них отсутствующие планы?
Скорее всего, моё исправление кода будет заключаться в том, чтобы просто не возвращать никакие подписки для таких пользователей в случае ошибки, но если у них действительно есть подписка, это не решит проблему. Возможно, я сделаю так, чтобы возвращалась ошибка с сообщением вроде: «Подписка найдена, но при загрузке её деталей возникла ошибка. Пожалуйста, обратитесь за помощью к администратору».