Ich nehme an, die Antwort ist „die API mit Tausenden von Anfragen bombardieren“, aber ich hoffte auf etwas Schlaueres.
Szenario: Wir haben eine Community-Website für eine große Genossenschaft gebaut. Es gibt über 15.000 Mitglieder, wahrscheinlich werden 95 % davon niemals einen Benutzer eröffnen, und weitere 4 % werden einen Benutzer erstellen, ihn aber nie benutzen. Das Erstellen eines einzigen Links für 15.000 Einladungen öffnet die Website für Missbrauch. Was ich tun möchte, ist, etwa 16.000 Einladungslinks zu erstellen, jeder mit nur einer Einladung, und das E-Mail-Vorlagentool kümmert sich um das Zusammenfügen. Der einzige Haken ist die Erstellung des Einladungslinks. Ich möchte die Systeme aus Datenschutzgründen trennen, daher werde ich die über 15.000 Adressen nicht an Discourse weitergeben, sodass der Discourse-Server nicht die gesamte E-Mail-Liste enthält, sondern nur die Liste der anonymen Einladungslinks.
Wenn Sie der Meinung sind, dass die Speicherung von Adressen in Discourse gefährlicher ist als die Speicherung an einem anderen Ort, ist dies ein Datenschutzproblem, und Sie müssen sie erstellen. Wenn Ihnen die API nicht gefällt, können Sie dies über Rails tun:
ok, ich war wirklich naiv. Ich habe die curl-Zeile erstellt und dachte, ich würde sie einfach 16.000 Mal ausführen, aber nach einer Minute wurde ich von meinem eigenen Diskurs ratenlimitiert
also, als Rails-Neuling, muss ich eine Shell im Diskurs-Container öffnen, irb eingeben und was genau tun?
Das wäre natürlich meine erste Wahl gewesen, nur habe ich die E-Mail-Liste nicht im Voraus. Dies ist eine Website für eine Kreditgenossenschaft, daher kann die Verwaltung mir nicht einfach eine Liste mit 15.500 E-Mails übergeben und ein Datenschutzdesaster riskieren (und ich möchte das Risiko nicht selbst eingehen). Daher muss ich 16.000 Links mit jeweils einer Einlösung erstellen, und sie werden sie in ihre E-Mail-Kanone einfügen. Ich hoffe, es wird später besser.
Ich vermute auch, dass es keine SSO-Authentifizierung gibt, die verwendet werden könnte.
In diesem Fall ist das, was @pfaffman vorgeschlagen hat, der richtige Weg.
Etwas wie
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}"
# schreibe "/invites/#{i.invite_key}" in eine Datei
end
würde das tun. Beginnen Sie mit Schleifen von 1 oder 2, bis es wie beabsichtigt funktioniert.
Eine faule, aber in Ordnung Methode wäre, einfach alle auszugeben (puts) und Ihre Terminal-Sitzung zu protokollieren
Ich weißt du was, ich möchte niemanden belästigen, der mir RoR über ein Forum beibringt. Ich sehe, dass das Hinzufügen einer 1-Sekunden-Verzögerung zwischen API-Aufrufen keine Geschwindigkeitsübertretung ist, daher wird dieser erste Durchlauf einfach ein langsamer Durchlauf sein.
Der API-Schlüssel wurde für den Benutzer „system“ erstellt, daher werden alle Einladungen nicht auf den Verwaltungsbildschirmen meines Benutzers angezeigt. Ich werde mich nun auf die Suche machen, um den Status der gesamten Einladungen auf dem Server zu sehen, ohne mich als „system“ anmelden zu müssen, falls das überhaupt möglich ist.
Danke vorerst, ich hoffe, ich habe nächstes Mal intelligentere und cleverere Fragen
Es ist ziemlich einfach, sich als System anzumelden, wenn man als „Entwickler“ (E-Mails, die beim Erstellen des Forums als Standardadministratoren angegeben werden) des Forums markiert ist. Sie können einfach die Benutzerseite von @system öffnen, auf Admin klicken, ganz nach unten scrollen und auf Impersonate klicken.
Oh, klar… Ich bin einfach nie so weit runter gescrollt sehr cool. Ich benutze Discourse seit Jahren als Benutzer auf verschiedenen Websites, habe aber als Manager einer davon ein paar grundlegende Nuancen übersehen…