Création de milliers d'invitations en masse

Je suppose que la réponse est « bombarder l’API avec des milliers de requêtes », mais j’espérais qu’il y ait quelque chose de plus intelligent.

Scénario : nous avons créé un site communautaire pour une grande coopérative. Il y a plus de 15 000 membres, probablement 95 % d’entre eux n’ouvriront jamais un compte et 4 % de plus créeront un compte mais ne l’utiliseront jamais. La création d’un seul lien pour 15 000 invitations ouvre le site à des abus, donc ce que je veux faire, c’est créer environ 16 000 liens d’invitation, chacun avec une seule invitation, et l’outil de création de modèles d’e-mails s’occupera de les assembler. Le seul problème est la création du lien d’invitation. Je veux séparer les systèmes pour des raisons de confidentialité, donc je ne fournirai pas les 15 000+ adresses à Discourse, de sorte que le serveur Discourse ne portera pas la liste complète des e-mails, juste la liste des liens d’invitation anonymes.

Si vous estimez que stocker des adresses dans Discourse est plus dangereux qu’ailleurs, vous devrez les créer vous-même. Si l’API ne vous convient pas, vous pouvez le faire depuis Rails :

 i=Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)

Cela vous donne une clé d’invitation.

"/invites/#{i.invite_key}"

est l’URL. Vous pourriez faire quelque chose pour tout écrire dans un fichier.

4 « J'aime »

C’est ce que je pensais, il faut toujours itérer dans une boucle :slight_smile:
ok, merci !

1 « J'aime »

ok, j’étais vraiment naïf. J’ai créé la ligne curl, et j’ai pensé que je la lancerais juste 16 000 fois, mais après une minute, j’ai été limité par mon propre discours :slight_smile: :man_facepalming:

donc, en tant que débutant en rails, je dois ouvrir un shell dans le conteneur discourse, entrer irb et faire quoi en fait ?

Avez-vous essayé d’utiliser Inviter en masse ?

Ce serait mon choix naturel, seulement je n’ai pas la liste des e-mails à l’avance. C’est un site pour une coopérative de crédit, donc la direction ne peut pas simplement me donner une liste de 15 500 e-mails et risquer une catastrophe en matière de confidentialité (et je ne veux pas prendre ce risque moi-même). Je dois donc créer 16 000 liens avec un seul remboursement dans chacun, et ils l’intégreront dans leur système d’envoi d’e-mails. J’espère que cela s’améliorera plus tard.

1 « J'aime »

Je suppose qu’il n’y a pas non plus d’authentification SSO qui pourrait être utilisée.

Dans ce cas, ce que @pfaffman a suggéré est la voie à suivre.

Quelque chose comme

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}"
  # write "/invites/#{i.invite_key}" to file
end

Ferait l’affaire. Commencez par des boucles de 1 ou 2 jusqu’à ce que cela fonctionne comme vous le souhaitez.

Une façon paresseuse mais acceptable de le faire serait de tout imprimer (puts) et d’enregistrer votre session de terminal :smiley:

3 « J'aime »

Vous savez quoi, je ne veux pas commencer à déranger qui que ce soit pour m’apprendre RoR sur un forum. Je vois qu’en ajoutant un délai de 1 seconde entre les appels API, je n’obtiens pas de ticket de vitesse, donc cette première exécution sera juste une exécution lente.

La clé API a été créée pour l’utilisateur « system », donc toutes les invitations n’apparaissent pas sur mes écrans de gestion d’utilisateur. Je vais maintenant me lancer dans une quête pour voir l’état des invitations totales sur le serveur sans avoir à me connecter en tant que « system », si cela est même possible.

Merci pour l’instant, j’espère avoir des questions plus intelligentes et astucieuses la prochaine fois :slight_smile:

1 « J'aime »

Il est assez facile de se connecter en tant que système si vous êtes marqué comme « développeur » (e-mails fournis lors de la création du forum en tant qu’administrateurs par défaut). Vous pouvez simplement ouvrir la page utilisateur de @system, sélectionner Admin, faire défiler tout en bas et cliquer sur Impersonate.

1 « J'aime »

oh bien sûr… Je n’avais jamais fait défiler aussi bas :slight_smile: très bien. J’ai utilisé Discourse en tant qu’utilisateur sur différents sites pendant des années, j’ai juste manqué quelques nuances de base en tant que gestionnaire de l’un d’eux…

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.