Creazione di migliaia di inviti in blocco

Suppongo che la risposta sia “inondare l’API con migliaia di richieste”, ma speravo ci fosse qualcosa di più intelligente.

Scenario: abbiamo creato un sito per la community per una grande cooperativa. Ci sono oltre 15.000 membri, probabilmente il 95% dei quali non aprirà mai un account e un altro 4% creerà un account ma non lo utilizzerà mai. La creazione di un singolo link per 15.000 inviti apre il sito agli abusi, quindi quello che voglio fare è creare circa 16.000 link di invito, ognuno con un solo invito, e lo strumento di creazione di modelli di posta elettronica si occuperà di unirli. L’unica insidia è la creazione del link di invito. Voglio separare i sistemi per la privacy, quindi non fornirò i 15.000+ indirizzi a Discourse, quindi il server Discourse non gestirà l’intera lista di email, ma solo la lista di link di invito anonimi.

Se ritieni che archiviare indirizzi in Discourse sia più pericoloso che archiviarli altrove sia una preoccupazione per la privacy, dovrai crearli. Se non ti piace l’API, potresti farlo da rails:

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

Ti dà una chiave di invito.

"/invites/#{i.invite_key}"

è l’URL. Potresti fare qualcosa per scriverli tutti su un file.

4 Mi Piace

È quello che pensavo, devo ancora iterare in un ciclo :slight_smile:
ok, grazie!

1 Mi Piace

ok, sono stato davvero ingenuo. Ho creato la riga curl e ho pensato di eseguirla 16.000 volte, ma dopo un minuto sono stato limitato dalla mia stessa discourse :slight_smile: :man_facepalming:

quindi, come principiante di Rails, devo aprire una shell nel container discourse, entrare in irb e fare cosa, in realtà?

Hai provato a usare Inviti Massivi?

Sarebbe stata la mia soluzione ideale, naturalmente, solo che non ho la lista di email in anticipo. Questo è un sito per una cooperativa di credito, quindi la direzione non può semplicemente darmi una lista di 15.500 email e rischiare un disastro per la privacy (e non voglio correre io stesso il rischio). quindi devo creare 16.000 link con un singolo riscatto in ciascuno, e loro lo inseriranno nel loro sistema di invio email. Spero che le cose migliorino in seguito.

1 Mi Piace

Sto anche ipotizzando che non ci sia un’autenticazione SSO che possa essere utilizzata.

In tal caso, ciò che @pfaffman ha suggerito è la strada da seguire.

Qualcosa come

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

Andrebbe bene. Inizia con cicli di 1 o 2 finché non funziona come intendi.

Un modo pigro ma accettabile per farlo sarebbe semplicemente stamparli tutti (puts) e registrare la tua sessione del terminale :smiley:

3 Mi Piace

Sai cosa, non voglio iniziare a disturbare nessuno per insegnarmi RoR tramite un forum. Vedo che aggiungendo un ritardo di 1 secondo tra le chiamate API non ricevo una multa per eccesso di velocità, quindi questa prima esecuzione sarà solo un’esecuzione lenta.

La chiave API è stata creata per l’utente “system”, quindi tutti gli inviti non vengono visualizzati nelle schermate di gestione del mio utente. Ora mi metterò alla ricerca per vedere lo stato degli inviti totali sul server senza dover accedere come “system”, se ciò è anche solo possibile.

Grazie per ora, spero di avere domande più intelligenti e argute la prossima volta :slight_smile:

1 Mi Piace

È abbastanza facile accedere come system, se sei contrassegnato come “developer” (email fornite durante la creazione del forum come amministratori predefiniti). Puoi semplicemente aprire la pagina utente di @system, selezionare Admin, scorrere fino in fondo e fare clic su Impersonate.

1 Mi Piace

oh certo… non avevo mai scrollato così in basso :slight_smile: molto bello. Ho usato Discourse come utente su diversi siti per anni, ho solo perso alcune sfumature di base come gestore di uno di essi…

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