
Как «красивый» Ruby-синтаксис украл request из Grape и поломал нам Rate Limiting
Ruvaleev 4 минуты назад Как «красивый» Ruby-синтаксис украл request из Grape и поломал нам Rate Limiting Время на прочтение 5 мин Охват и читатели 14 Ruby * Ruby on Rails * Кейс Как "красивый" Ruby-синтаксис украл...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Ruvaleev 4 минуты назад Как «красивый» Ruby-синтаксис украл request из Grape и поломал нам Rate Limiting Время на прочтение 5 мин Охват и читатели 14 Ruby * Ruby on Rails * Кейс Как "красивый" Ruby-синтаксис украл request из Grape и поломал нам Rate Limiting Решили мы как-то добавить Rate Limits заголовки к SubscriptionRequiredError ошибкам, чтобы фронт (приложение для подсчета калорий MealUp ) понимал, какие именно лимиты и насколько пользователь превысил. Для этого мы стали рендерить эту ошибку с расчётом лимитов для конкретного пользователя - current_user . Перехватывали мы ошибку стандартно: mealup/app/api/v1/api.
rb: module V1 class API { ActiveRecord::RecordNotFound=>:render_not_found_error, SubscriptionRequiredError=>:render_error, Telegram::InvalidSchemeError=>:render_error } Когда понадобится обработать ту или иную ошибку, за это возьмется метод Grape::Middleware::Error#run_rescue_handler . def run_rescue_handler(handler, error, endpoint) if handler. (Symbol) raise NoMethodError, "undefined method '#{handler}'" unless respond_to?
Технические детали
(handler) handler = public_method(handler) # # (V1::Helpers::ResponseHelpers)#render_error(error) ... /mealup/app/api/v1/helpers/response_helpers. rb:59> чуть позже в том же run_rescue_handler будет вызван endpoint.
instance_exec(error, &handler) , и код возвращается из гема в наш helper, но уже без request и без current_user.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





