자체 호스팅 인스턴스에서 구독(요금제 테이블)을 사용하려고 합니다. Stripe 테스트 모드에서 설정과 테스트를 마쳤고, 라이브 모드로 전환했을 때 동작은 정상적으로 보이지만, 내 프로필의 “결제” 탭에서 오류가 보고되고 있습니다.
오류
/s/user/subscriptions 로드 중
문제가 발생했습니다.
JavaScript 콘솔을 열어서 확인해 보니 다음과 같은 메시지가 나옵니다.
“테스트 모드에 유사한 객체가 존재하지만 라이브 모드 키가 사용되었습니다”
이로 인해 모드 전환 시 일관성 문제가 있는 것 같습니다. 이제 이 문제가 무엇인지 알았으니 어떤 계정으로 테스트할지 주의할 수는 있지만, 제 질문은 다음과 같습니다. 테스트 모드에서 구독을 진행했던 사용자가 이제 라이브 모드에서 실제 구독을 하려고 할 때, 이 문제를 어떻게 해결할 수 있을까요?
(즉, 이 오류를 어떻게 해제할 수 있나요?)
사용자의 모든 구독, 잠재적으로 문제를 일으킬 수 있는 구독을 포함하여 모두 초기화할 수 있는 데이터베이스 쿼리나 유사한 방법이 있을까요?
감사합니다.
요약하자면, 테스트 모드를 사용하면서 테스트 구독을 시도한 사용자들에게 잔여 데이터가 남아있는 것 같습니다. 구독이 올바르게 또는 예상된 방식으로 취소되지 않은 것으로 추측됩니다. 프로덕션 모드로 전환하면 결제 탭에서 오류가 발생합니다.
시도해 본 것 …
아래 내용은 절대적으로 문자 그대로 받아들이지 마세요. 다른 게시물을 바탕으로 추측한 것이며, 사용된 명령어입니다. 다만 리터럴을 사용하거나 몇 가지를 반복했을 수 있습니다. 하지만 대략적인 흐름은 다음과 같습니다.
./launcher enter app
rails c
u = User.find_by_username(<username>)
c = DiscourseSubscriptions::Customer.find_by(user_id: u.id)
subscription = DiscourseSubscriptions::Subscription.where(customer_id: c[:customer_id])
subscription.destroy_all
c.destroy
"subscription.destroy_all"은 Stripe에 대한 잔여 외부 참조를 제거하는 것 같고, "c.destroy"는 로컬 구독을 제거하는 것 같습니다. 이렇게 하는 것이 괜찮은가요, 아니면 내부적으로 무언가를 망친 건가요?
그리고 구독(Subscription) 기능에 대해 제가 가지고 있는 문제점 중 하나는, 이 기능이 실제로 구독(!)만 처리한다는 점입니다. 머그컵, 티셔츠 같은 랜덤한 굿즈를 추가하는 데는 그렇게 뛰어나지 않아요… 물론 가능하다고 볼 수도 있지만, 가격 테이블을 활용한 표시 방식은 실제 구독과 함께 사용할 때 제대로 작동하지 않습니다. (그리고 상품 개수가 4개로 제한되어 있기도 하죠.)
이 문제를 해결하기 위해, 페이지에 "버튼"을 추가하여 “하나의” 가격 테이블을 "페이지"에 삽입하는 방법을 고안해냈습니다. 이렇게 하면 가격 테이블 사용 개수에 대한 제한이 사라지고, 페이지 내에서 인라인으로 사용할 수 있어 맥락을 부여할 수 있습니다. (구독 페이지는 사용자가 "구매"를 클릭했을 때 어떤 결과를 받게 되는지 명확히 인지할 수 있도록 하는 측면에서 다소 맥락에서 벗어나 있는 느낌이거든요.. )
대략 25줄 분량이며, 관리자 UI를 통해 구현됩니다. 외부 플러그인은 필요하지 않습니다. 어디서도 찾을 수 없었던, 범용적으로 유용한 솔루션인 것 같습니다. 공개적으로 공유하기에 가장 좋은 곳은 어디일까요?