So here is my issue. I have a requirement to essentially seed a Discourse production instance with around 200 posts at a time from a plugin admin action. These posts will be ‘created by’ 1 of 10 different regular users. The reason it’s a plugin action is because the users of this particular instance have a team of moderators they want to train up, and wanted some test posts to train them on, and the ability to seed more when they need them.
I got this working fine by passing skip_validations: true to PostCreator.new, however now there’s a requirement that some of the created posts are also flagged.
I first attempted to disable the RateLimiter but that was causing my action to crash the server process eventually, possibly when I was trying to turn it back on, and then I realised it probably wasn’t a good idea anyway.
So my question is, is there a better way to bypass the rate limiter when running some arbitrary code i.e. something like:
RateLimiter.bypass do
# run some code not affected by the rate limiter
end
Or do I need to basically just need to copy most of what the PostActionCreator is doing but leave out the troublesome line?
Any help would be greatly appreciated! I’m still absorbing a lot of the Discourse code so I’m aware I’ve probably missed something that makes this a lot easier!
Haben Sie das herausgefunden? Das Ändern der YAML-Datei ist nicht ideal, da es einen Neuerstellungsprozess erfordert. Ich bin nicht vertraut genug mit Rails/Discourse, um herauszufinden, wie man es vorübergehend in der Konsole deaktiviert.
Ich versuche, 60.000 Benutzer so schnell wie möglich über die API zu importieren, ohne einen Neuaufbau durchzuführen. Ich habe auch auf einer Testinstallation versucht, das ADMIN-API-Limit über YAML zu erhöhen, aber es schien nicht zu funktionieren, aber vielleicht habe ich etwas falsch gemacht. (Ich führe Importe im Container durch, sodass die HTTP-Drosselung nicht gelten sollte).
Aber Sie können in den Container gehen und /var/www/discourse/config/discourse.conf bearbeiten und diese Variablen dort setzen und dann ein sv restart unicorn (oder vielleicht sv reload unicorn) ausführen. Sie möchten wahrscheinlich etwas wie apt-get update; apt-get install -y vim tun, um einen Editor zu haben.
Seltsam. Wenn ich die Konfigurationsdatei ansehe, ist das neue Limit bereits gesetzt. Das YAML-Update hat also funktioniert:
max_admin_api_reqs_per_key_per_minute = '6000'
Aber es scheint nicht zu funktionieren. Es gibt immer noch eine Begrenzung von 60 pro Minute. Wenn ich Anfragen auf 60 pro Minute drossle, gehen die meisten durch, aber aufgrund von Jitter lösen einige immer noch den Ratenbegrenzer aus:
{'success': True, 'active': True, 'message': 'Ihr Konto ist aktiviert und einsatzbereit.', 'user_id': 3596}
{'success': False, 'message': 'Neue Registrierungen sind von Ihrer IP-Adresse nicht erlaubt (maximales Limit erreicht). Kontaktieren Sie einen Mitarbeiter.', 'errors': {'ip_address': ['Neue Registrierungen sind von Ihrer IP-Adresse nicht erlaubt (maximales Limit erreicht). Kontaktieren Sie einen Mitarbeiter.']}, 'values': {'name': None, 'username': 'asdfd', 'email': 'user@domain.com'}, 'is_developer': False}
{'success': True, 'active': True, 'message': 'Ihr Konto ist aktiviert und einsatzbereit.', 'user_id': 3597}
Ich glaube, es hängt mit einem anderen Limit zusammen: Ich denke, es ist das Limit für die maximale Anzahl von Registrierungen von einer IP-Adresse, das erreicht wird, aber ich verstehe nicht, warum es nach dem Erreichen dieses Limits nicht dauerhaft blockiert wird. Möglicherweise ein Fehler in diesem Spam-Limit?
Wenn all diese Nutzer dieselbe IP-Adresse haben, dann liegst du wahrscheinlich richtig. Ich denke, die Lösung ist, diese Einstellung zu ändern oder den Leuten gefälschte IP-Adressen wie 127.0.0.x zu geben (oder vielleicht IPv6 zu verwenden, um es einfacher zu machen?).
Ich glaube, es erkennt, wo die Anfrage gestellt wird (Host-Computer), aber ich kann es umgehen, indem ich einen TL2-Benutzer mit derselben IP-Adresse hinzufüge (oder das IP-Limit anpasse).
Ja, das werde ich versuchen. Aber mir ist nicht klar, wie ich das Skript ausführen soll, wohin ich es kopieren soll und wie ich es ausführen soll (sobald ich die CSV-Dateien an den richtigen Stellen platziert habe)?
Als Nachtrag, angesichts des Aufwands, die Skripte und Ruby usw. zu verstehen, und der wahrscheinlichen Leistung, habe ich einen anderen Weg eingeschlagen und alle Limits umgangen, indem ich direkt mit SQL in die Datenbank geschrieben habe. Auf diese Weise konnte ich mehrere tausend Einfügungen pro Sekunde erzielen.
Es gab ein Thema, in dem gefragt wurde, welche Tabellen benötigt werden. Es ist jetzt geschlossen, daher antworte ich hier, dass ich die folgenden Tabellen geändert habe, um die Benutzer einzufügen: