カテゴリ作成によるAPIレート制限の変更・削除

API 経由でのカテゴリ作成で問題が発生しています。制限があるようですが、その制限はカスタマイズできず、無効化する設定もどこにも見当たりません。

表示されるエラーメッセージは以下の通りです:We have a daily limit on how many times that action can be taken. Please wait 17 seconds before trying again.(そのアクションは1日に実行できる回数に制限があります。17秒待ってから再度お試しください。)

待機秒数は常に20秒未満のようですが、17秒と表示されていても実際には正確ではありません。さらに、このエラーは「1日あたりの制限」として表示されるにもかかわらず、最後の試行から1分以内でも同様のエラーが出ます。また、管理ダッシュボードで_すべての_レート制限を1000以上に調整してみましたが、カテゴリ作成には何の影響も与えませんでした。

ダッシュボードに表示される利用可能なレート制限は以下の通りです:最大トピック数、プライベートメッセージ、いいね、ブックマーク、フラグ、編集、招待、トピック招待、トピック、印刷、ログイン。

私は GitHub - discourse/discourse_api: Ruby API for Discourse · GitHub を使用しており、指定されていないレート制限に達するまでは問題なく動作していました。

何か見落としているのでしょうか?これは nginx 由来のものではなく、メッセージは Discourse からのものです。また、nginx のレート制限テンプレートは無効化されています。

See:

Thanks @sam, not sure how I missed that!

No worries, I have meant to make that post for a while @mpalmer asked for it a few weeks ago ;p

@community FYI ^^^

Ahh, it’s new, didn’t notice that either. Not on top of it today I guess…

I’m only performing one request though to create a category and don’t see any daily limits there. Is there another limit that would be attributing to the 429 error?

Well first thing I would try is another API endpoint to see if this is the global rate limit or some specific rate limit on category creation (or maybe a user rate limit in the app), be sure your api_username is an admin

Using ‘system’ and the key was generated via the admin dashboard. It don’t have an issue grabbing the category list, only creating a category.

Not seeing anything particular in the app, I would try a different admin user to see what happens, maybe the error you are getting is a different limit.

Tried another user and a generic key for all users, but both hit the same 429 error and limit when trying to create a category.

Is there anything in the response body you are receiving?

Just the error message:

 {"errors"=>["We have a daily limit on how many times that action can be taken. Please wait 21 seconds before trying again."], "error_type"=>"rate_limit"} (DiscourseApi::TooManyRequests)

Are you 100% sure nothing is stuck in some sort of a loop hitting the server?

Also are you running latest version of Discourse?

Does it come back with 21 seconds every time?

Running 2.0.0.beta1. Not aware of anything looping, only I have access to these keys and the script that runs them is ran manually by me as I’m developing something to automate creating categories. I have 1 call to get the existing category lists, then one call per category creation (only 1 category right now). It has worked to create most of the categories before the rate limit got hit.

The ‘seconds’ varies; often 12, 17, 21, or other amount around that amount.

What happens if you disable the global admin api rate limit (raise it to say 500 a minute and 500 per ten seconds)? Does this go away?

I would guess that something about your script is pummeling too many requests at the server.

Yup… you appear to have been right! A variable wasn’t being set when it needed to be, so it was bypassing a check I had. Seems to be working fine now, no hammering the API anymore. Still good to know the info you posted though, so I appreciate that.

Hey @sam, could you point me to where I can disable the global admin api limit? I have a script to pull response times that requires getting all the topics in a timeframe and then for each topic, getting all of the posts for the topic, and I keep running into the rate limiting (You’ve performed this action too many times. Please wait 6 seconds before trying again.').

Apologies if this old thread i dug up is now really out of date :smiley:

Are you 100% sure it is not covered in: