Рендеринг html из стойки rails

Я использую атаку в стойку. Если кто-то превышает лимит, я использую следующий код:

Rack::Attack.throttled_response = lambda do |env|
  [429, {}, [ActionView::Base.new.render(file: 'public/429.html')]]
end

Когда sby превышает ограничение на запрос POST, где исходный ответ будет respond_to :html, тогда рендеринг 429.html работает нормально. Когда предел превышен POST-запросом, который отвечает на respond_to :js, на экране ничего не происходит, но если я проверю журналы, все будет в порядке:

Rendered public/429.html (1.4ms)

Как я могу отобразить 429.html в случае js response? Можно ли как-то передать error messages из этого кода стойки в приложение rails? Я могу изменить на error messages с rendering, если это не так сложно.


person Sean Magyar    schedule 25.03.2016    source источник


Ответы (1)


Rack::Attack.throttled_response = lambda do |env|
  html = ActionView::Base.new.render(file: 'public/429.html')
  [503, {'Content-Type' => 'text/html'}, [html]]
end

Вы можете установить любой тип содержимого ответа во втором параметре.

person Yang    schedule 20.09.2016
comment
Для Rails 6 вы захотите использовать ActionView::Base.empty вместо ActionView::Base.new - person venables; 16.09.2020