Come posso evitare il limit rate quando importo un sacco di dati?

Sto cercando di creare un sacco di argomenti + post automaticamente. Tuttavia, continuo a essere colpito dai limiti di frequenza.

Ho provato prima usando l’API. Il mio script ha rapidamente raggiunto errori 429. Ho provato ad aggiustare i limiti di frequenza come amministratore (vedi screenshot), ma non mi è chiaro quale sia l’approccio corretto qui, o se si tratti di un’impresa impossibile.

Poi, ho provato a usare uno script ruby con rails r <script> dall’interno del container. Tuttavia, anche qui, vedo An error occurred RateLimiter::LimitExceeded. Sono rimasto sorpreso da questo, perché il metodo ruby è soggetto a limiti di frequenza?

Comunque, c’è un modo per evitarlo? Qual è il modo giusto per importare dati in blocco? Ho pensato di usare direttamente SQL ma preferirei un’API di livello superiore in modo da non dovermi preoccupare di campi mancanti nel database quando creo un elemento.

Grazie in anticipo.

Che aspetto ha?

Dovresti usare rails per importare i dati, non l’API.

Potresti dare un’occhiata agli script di importazione, ma potresti aver bisogno di qualcosa di più semplice.

def add_all()
  limit = 2000
  translations = Dir["/shared/translations/vagrant-data/translations/*.txt"]
  ps = Dir["/shared/translations/vagrant-data/paragraphs/*.txt"]

  # RateLimiter.new.disable_rate_limits!

  translations.each_with_index do |t,i|
    p = ps[i]

    tr_text = File.read(t)
    p_text = File.read(p)
   

    description = "#{p_text}\n\nTradotto come:\n\n#{tr_text}"
    title = " il libro (paragrafo ##{i+1})"
    if (i < limit)
      begin
        puts "Aggiunta argomento #{tr_text}"
        topic = Topic.create!( title: title, category_id: 5, user_id: 3 )
        Post.create!( topic_id: topic.id, raw: description, user_id: 3, skip_validation: true )
      rescue Exception => e
        puts "Si è verificato un errore #{e}"
      end
    end
  end
end

add_all()

E questo genera un errore di rate limiting? Penserei che funzionerebbe benissimo.

Sì, vedi il mio post precedente. Entra nel blocco rescue con quell’errore.

1 Mi Piace

Mi chiedo se il mio server sia in uno stato strano. Ho armeggiato con i limiti di frequenza nello screenshot, impostandoli a zero e forse a -1. Ora ricevo questi errori di limite di frequenza ovunque. È strano però, alcune richieste passano, quindi su 1500 record che voglio creare, tre o quattro finiscono nel database. Forse distruggerò il database e lo aggiornerò per vedere se questo lo risolve. Non sono sicuro di come controllare lo stato del database e catturare il bug, se ce n’è uno.

1 Mi Piace

Come è stata creata questa istanza? Quale versione sta eseguendo?

1 Mi Piace
#### Installato

### 3.1.0.beta5

( [ 5584fb1e3b ](https://github.com/discourse/discourse/commits/5584fb1e3b7a29d7ee5d7e43520191081dd10a16) )

Ho appena eseguito la normale installazione di Docker. Niente di speciale.

È possibile disabilitare temporaneamente i limiti di frequenza durante l’importazione e ripristinarli in seguito? Al momento sono l’unico a utilizzare l’API (non prevedo di consentire ai miei utenti di utilizzare l’API). Pertanto, potrei anche disabilitare permanentemente i limiti di frequenza, se ciò fosse possibile.

Non ho mai visto limiti di frequenza in esecuzione in Rails. Non ho idea.

1 Mi Piace

@pfaffman Scommetto che ho rovinato qualcosa modificando i limiti di velocità e ora il sistema è in uno stato strano e questi errori non sono il vero problema, c’è qualcos’altro. Creerò nuovamente il server e vedrò se il mio script funziona questa volta e poi riferirò.

2 Mi Piace

Purtroppo, ricreare il server non ha risolto le cose. :frowning:

Ho eliminato la directory postgres_data all’interno di shared, quindi ho eseguito ./launcher rebuild app e ho ottenuto una nuova istanza dell’app.

Il mio script ora crea l’utente e la categoria di proprietà dell’utente, e poi tenta di creare argomenti all’interno di quella categoria. Tuttavia, incontra immediatamente l’errore di limite di frequenza: An error occurred RateLimiter::LimitExceeded

Sono davvero perplesso perché sembra che gli script rails r non dovrebbero essere soggetti ai problemi di limite di frequenza, giusto? Vedo del codice nei modelli che indica che il codice di limitazione della frequenza viene eseguito, ma non so come disabilitarlo né come verificare che ciò debba accadere solo quando una richiesta arriva tramite l’API.

Altri suggerimenti? Penso che accedere direttamente tramite psql sia ora la mia migliore opzione, il che è deludente perché lo script rails r è molto più pulito e facile da usare.

L’ho sistemato!

Il potere dei test è dimostrato proprio qui. Sono andato in questo file:

che mostrava questo metodo RateLimiter.enable. Ho pensato, perché non provare RateLimiter.disable.

Niente più errori di rate limiting!

4 Mi Piace

Bel lavoro! Non ho mai visto niente del genere.

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