Я ищу механизм ограничения скорости для моих рельсов 3 приложения. Я нашел некоторые, но это не то, что мне нужно. Я нашел драгоценный камень с дроссельной заслонкой и драгоценный камень. Кажется, что дроссельная заслонка работает для каждого запроса на использование рельсов, но мне нужно ограничивать запросы только одним действием. Curbit был обновлен два года назад. Может ли кто-нибудь рассказать мне о каких-либо других механизмах ограничения скорости, которые я могу использовать? Обратите внимание, что он должен работать с кешированием.Ограничение скорости для контроллеров рельсов
ответ
Ну, наконец, дроссельная заслонка - это хорошее решение.
Вы можете сделать это следующим образом. Вам нужно определить свой пользовательский ограничитель. Это может быть основано на одном из следующих ограничителей
Rack::Throttle::Limiter
Rack::Throttle::Interval
Rack::Throttle::Hourly
Rack::Throttle::Daily
Все, что вам нужно сделать, это извлечь из одного из указанных выше классов, чтобы определить собственную логику. Например:
class CustomLimiter < Rack::Throttle::Interval
def allowed?(request)
#custom logic here
end
end
Вы должны поместить этот файл в RAILS_ROOT/lib
пути. Затем в файле application.rb
вы должны указать, какой класс использовать в качестве ограничителя. Например, если вы хотите применить ограничитель только к одному действию вы можете сделать это следующим образом:
#lib/custom_limiter.rb
class CustomLimiter < Rack::Throttle::Interval
def allowed?(request)
path_info = Rails.application.routes.recognize_path request.url rescue {}
if path_info[:controller] == "application" and path_info[:action] == "check_answer"
super
else
true
end
end
end
#config/application.rb
class Application < Rails::Application
...
#Set up rate limiting
config.require "custom_limiter"
config.middleware.use CustomLimiter, :min => 0.2
...
end
Вы, возможно, потребуется принять this во внимание
Надежда это будет полезно
UPD :
вы можете проверить еще одно решение: rack-attack
неправильный код! измените на config.require "custom_failure"
–
CelinHC
исправлено все, кажется, сейчас – RomanKapitonov
Спасибо за пошаговое руководство. Просто узнайте немного о настройке. Используете ли вы, какую БД хранить счетчики? – Eduardo
rack-throttle
делает, что вы хотите. Подкласс Limiter
и определите свой собственный метод #allowed?
. Просто верните true, если запрос не является действием, которое вы хотите получить, и не считайте его пределом. Взгляните на daily.rb
. Переопределите #cache_set
, чтобы он не сохранял те, которые не соответствуют маршруту, который вы хотите ограничить.
Я переопределил его и поместил файл в каталог lib и перезапустил сервер, но он не работает. 'class CustomLimiter
- 1. Ограничение скорости/ограничение скорости в PHP
- 2. Ограничение скорости процессора для профилирования
- 3. Ограничение скорости для просмотра прокрутки
- 4. JMeter: скорости транзакций управления для контроллеров транзакций
- 5. Ограничение скорости регистрации API
- 6. netfilter ограничение скорости
- 7. Ограничение скорости Twitter
- 8. Ftp: ограничение скорости передачи
- 9. Сельдерей (Django) Ограничение скорости
- 10. Ограничение скорости Firebase
- 11. Django: Простое ограничение скорости
- 12. Предотвращение спама (ограничение скорости)
- 13. Twitter Ограничение скорости
- 14. Использование контроллеров рельсов в C#
- 15. Ограничение скорости API API
- 16. Twitter Случайное ограничение скорости
- 17. Ограничение скорости сети
- 18. Ограничение скорости с Bacon.JS
- 19. Ограничение скорости передачи TCP
- 20. Ограничение скорости Google API
- 21. Yii2 Ограничение скорости Api
- 22. Ограничение скорости OkHttp API
- 23. Ограничение скорости записи
- 24. pubsub Ограничение динамической скорости
- 25. Ограничение скорости текущей дороги
- 26. openvswitch, OpenFlow, ограничение скорости
- 27. Легкий способ переименования контроллеров рельсов
- 28. Рельсов подписка ограничение
- 29. Условное ограничение миграции рельсов
- 30. Средства для наложения стружки: ограничение скорости?
как насчет дросселирования на веб-сервере (apache?) – Roger
@Rogier проект будет развернут на heroku – RomanKapitonov