Wie vermeide ich Rate Limiting beim Import großer Datenmengen?

Ich versuche, eine Reihe von Themen + Beiträgen automatisch zu erstellen. Ich stoße jedoch immer wieder auf Ratenbegrenzungen.

Ich habe dies zuerst über die API versucht. Mein Skript stieß schnell auf 429-Fehler. Ich habe versucht, die Ratenbegrenzungen als Administrator anzupassen (siehe Screenshot), aber ich bin mir nicht sicher, was der richtige Ansatz hier ist oder ob dies eine vergebliche Mühe ist.

Dann habe ich versucht, ein Ruby-Skript mit rails r <script> aus dem Container heraus zu verwenden. Hier sehe ich jedoch wieder An error occurred RateLimiter::LimitExceeded. Ich war überrascht, warum die Ruby-Methode Ratenbegrenzungen unterliegt?

Gibt es auf jeden Fall eine Möglichkeit, dies zu vermeiden? Was ist der richtige Weg, um Daten in großen Mengen zu importieren? Ich habe darüber nachgedacht, direkt SQL zu verwenden, würde aber eine höherrangige API bevorzugen, damit ich mir keine Sorgen machen muss, Felder in der Datenbank zu übersehen, wenn ich einen Eintrag erstelle.

Vielen Dank im Voraus.

Wie sieht das aus?

Sie sollten Rails zum Importieren der Daten verwenden, nicht die API.

Sie könnten sich die Importskripte ansehen, aber Sie benötigen möglicherweise etwas Einfacheres.

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\nÜbersetzt als:\n\n#{tr_text}"
    title = " das Buchi (Absatz ##{i+1})"
    if (i < limit)
      begin
        puts "Füge Thema hinzu #{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 "Ein Fehler ist aufgetreten #{e}"
      end
    end
  end
end

add_all()

Und das erzeugt einen Rate-Limit-Fehler? Ich würde denken, das würde problemlos funktionieren.

Ja, siehe meinen vorherigen Beitrag. Es gelangt mit diesem Fehler in den Rescue-Block.

1 „Gefällt mir“

Ich frage mich, ob mein Server in einem seltsamen Zustand ist. Ich habe mit den Ratenbegrenzungen im Screenshot herumgespielt und sie auf Null und vielleicht -1 gesetzt. Jetzt bekomme ich überall diese Ratenbegrenzungsfehler. Es ist seltsam, einige der Anfragen kommen durch, sodass von 1500 Datensätzen, die ich erstellen möchte, drei oder vier in die Datenbank gelangen. Vielleicht lösche ich die Datenbank und aktualisiere sie und sehe, ob das das Problem behebt. Ich bin mir nicht sicher, wie ich den Zustand der Datenbank überprüfen und den Fehler erfassen kann, falls einer vorhanden ist.

1 „Gefällt mir“

Wie wurde diese Instanz erstellt? Welche Version läuft?

1 „Gefällt mir“
#### Installiert

### 3.1.0.beta5

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

Ich habe gerade die normale Docker-Installation durchgeführt. Nichts Besonderes.

Ist es möglich, die Ratenbegrenzungen vorübergehend zu deaktivieren, während ich importiere, und sie später wiederherzustellen? Im Moment bin ich der Einzige, der die API jemals nutzen wird (ich gehe nicht davon aus, dass ich meine Benutzer die API nutzen lasse). Daher könnte ich die Ratenbegrenzungen sogar dauerhaft deaktivieren, wenn das möglich ist.

Ich habe noch nie Ratenbegrenzungen in Rails gesehen. Ich habe keine Ahnung.

1 „Gefällt mir“

@pfaffman Ich wette, ich habe etwas falsch gemacht, indem ich die Ratenbegrenzungen geändert habe, und jetzt ist das System in einem seltsamen Zustand und diese Fehler sind nicht wirklich das Problem, sondern etwas anderes. Ich werde den Server neu erstellen und sehen, ob mein Skript dieses Mal funktioniert, und dann berichten.

2 „Gefällt mir“

Leider hat die Neuerstellung des Servers die Probleme nicht behoben. :frowning:

Ich habe das Verzeichnis postgres_data in shared gelöscht und dann ./launcher rebuild app ausgeführt, um eine neue Instanz der App zu erhalten.

Mein Skript erstellt nun den Benutzer und die Kategorie, die dem Benutzer gehören, und versucht dann, Themen innerhalb dieser Kategorie zu erstellen. Es stößt jedoch sofort auf den Ratenbegrenzungsfehler: An error occurred RateLimiter::LimitExceeded

Ich bin wirklich ratlos, da es so aussieht, als ob die rails r-Skripte nicht den Ratenbegrenzungsproblemen unterliegen sollten, oder? Ich sehe Code in den Modellen, der darauf hindeutet, dass Ratenbegrenzungscode ausgeführt wird, aber ich weiß nicht, wie ich ihn deaktivieren oder überprüfen kann, ob dies nur geschieht, wenn eine Anfrage über die API eingeht.

Irgendwelche anderen Vorschläge? Ich denke, der direkte Zugriff über psql ist jetzt mein bester Weg, was enttäuschend ist, da das rails r-Skript viel sauberer und einfacher zu verwenden ist.

Ich habe es behoben!

Die Macht von Tests beweist sich hier. Ich ging zu dieser Datei:

Das zeigte diese Methode RateLimiter.enable. Ich dachte, warum nicht RateLimiter.disable ausprobieren.

Keine Rate-Limit-Fehler mehr!

4 „Gefällt mir“

Gute Arbeit! Das habe ich noch nie gesehen.

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