답은 "API에 수천 개의 요청을 쏟아붓는 것"일 거라 짐작하지만, 더 지능적인 방법이 있기를 바랐습니다.
상황은 이렇습니다. 대형 협동조합(Co-Op)을 위한 커뮤니티 사이트를 구축했습니다. 회원은 15,000명 이상이며, 이 중 95%는 사용자 계정을 만들지 않을 것이고, 나머지 4%는 계정을 만들더라도 사용하지 않을 가능성이 높습니다. 15,000명의 초대장을 위한 단일 링크를 생성하면 사이트가 악용될 수 있으므로, 저는 각 링크에 초대장이 하나씩만 포함된 16,000여 개의 초대 링크를 생성하고, 메일 템플팅 도구가 이를 자동으로 연결하도록 하려 합니다. 유일한 문제는 초대 링크 생성입니다. 프라이버시를 위해 시스템을 분리해야 하므로 15,000개 이상의 이메일 주소를 Discourse에 전달하지 않을 것입니다. 따라서 Discourse 서버는 전체 이메일 목록이 아니라 익명의 초대 링크 목록만 보유하게 됩니다.
당연히 제 첫 번째 선택지는 그 방법이겠지만, 저는 사전에 이메일 목록을 가지고 있지 않습니다. 이건 신용조합 웹사이트인데, 관리부가 15,500개의 이메일 목록을 제게 넘겨주다가 개인정보 유출이라는 대형 사고를 낼 위험을 감수할 수는 없으니까요(그리고 저도 그런 위험을 감수하고 싶지 않습니다). 그래서 저는 각 링크에 단일 사용 가능 횟수를 설정한 16,000개의 링크를 생성해야 하고, 그들은 이를 이메일 발송 시스템에 통합할 것입니다. 나중에 상황이 나아지길 바랍니다.
user = User.find_by(username: 'system')
16000.times do
i = Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)
puts "/invites/#{i.invite_key}"
# "/invites/#{i.invite_key}"를 파일에 기록
end
이렇게 하면 됩니다. 처음에는 1회 또는 2회 루프부터 시작해서 의도한 대로 작동하는지 확인해 보세요.
포럼의 “developer”(포럼 빌드 시 기본 관리자로 이메일이 제공되는 사용자)로 표시된 경우, system으로 로그인하는 것은 꽤 쉽습니다. @system의 사용자 페이지를 열고 Admin을 선택한 뒤, 맨 아래로 스크롤하여 Impersonate를 클릭하기만 하면 됩니다.