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!
Avez-vous trouvé une solution ? Modifier le fichier yaml n’est pas idéal car cela nécessite une reconstruction. Je ne suis pas assez familier avec rails/discourse pour savoir comment le désactiver temporairement dans la console.
J’essaie d’importer 60 000 utilisateurs via l’API aussi rapidement que possible sans reconstruire. J’ai également essayé sur une installation de test d’augmenter la limite de l’API ADMIN via YAML, mais cela n’a pas semblé fonctionner, mais peut-être que j’ai mal fait quelque chose. (J’exécute les importations sur le conteneur, donc la limitation HTTP ne devrait pas s’appliquer).
Mais vous pouvez entrer dans le conteneur et modifier /var/www/discourse/config/discourse.conf et y définir ces variables, puis faire un sv restart unicorn (ou peut-être sv reload unicorn). Vous voudrez probablement faire quelque chose comme apt-get update; apt-get install -y vim pour avoir un éditeur.
Étrange. Lorsque j’affiche le fichier de configuration, la nouvelle limite est déjà définie. La mise à jour YAML a donc fonctionné :
max_admin_api_reqs_per_key_per_minute = '6000'
Mais cela ne semble pas fonctionner. Il y a toujours une limitation de 60 par minute. Lorsque je limite les requêtes à 60 par minute, la plupart passent, mais en raison de la gigue, quelques-unes déclenchent toujours le limiteur de débit :
{'success': True, 'active': True, 'message': 'Your account is activated and ready to use.', 'user_id': 3596}
{'success': False, 'message': ' New registrations are not allowed from your IP address (maximum limit reached). Contact a staff member.', 'errors': {'ip_address': ['New registrations are not allowed from your IP address (maximum limit reached). Contact a staff member.']}, 'values': {'name': None, 'username': 'asdfd', 'email': 'user@domain.com'}, 'is_developer': False}
{'success': True, 'active': True, 'message': 'Your account is activated and ready to use.', 'user_id': 3597}
Je pense que c’est lié à une autre limite : je pense que c’est la limite d’enregistrements maximum à partir d’une adresse IP qui est atteinte, mais je ne comprends pas pourquoi elle ne bloque pas définitivement après l’avoir atteinte. S’agit-il potentiellement d’un bug dans cette limite anti-spam ?
Si ces utilisateurs ont tous la même adresse IP, alors je parie que vous avez raison. Je pense que la solution est de modifier ce paramètre ou de donner aux gens des adresses IP bidon comme 127.0.0.x (ou peut-être utiliser IPv6 pour faciliter les choses ?)
Je pense qu’il détecte d’où la requête est faite (ordinateur hôte) mais je peux contourner cela en ajoutant un utilisateur TL2 sur la même adresse IP (ou en ajustant la limite d’IP).
Oui, je vais essayer ça. Mais je ne suis pas sûr de la façon dont je suis censé exécuter le script, où dois-je le copier et comment l’exécuter (une fois que j’aurai mis le CSV aux bons endroits) ?
Pour faire suite à l’effort de compréhension des scripts et de Ruby, etc., et compte tenu des performances probables, j’ai choisi une autre voie et j’ai contourné toutes les limites en écrivant directement dans la base de données en utilisant SQL. De cette façon, j’ai pu effectuer plusieurs milliers d’insertions par seconde.
Il y avait un sujet demandant quelles tables étaient nécessaires, il est maintenant fermé, donc je réponds ici que j’ai modifié les tables suivantes pour insérer les utilisateurs :