rack-attack gemで保存先にRedisを指定する

https://github.com/kickstarter/rack-attack という便利なgemがあります。

特定のアクセスのみを許可するSafelists機能や、特定のアクセスを弾くBlocklist機能や n秒間にn回アクセスされたらアクセスを弾くThrottles機能、特定のアクセスを記録するTracks機能等々があり、大変便利です。

で、Throttles機能なんかはアプリケーションサーバーが複数ある場合、アクセス回数を共通ストレージに保存しないと正確なカウントができません。

rack-attack はmemcached と redis が保存先に選べます。 (デフォルトはサーバーのメモリに保存される)

Redisに保存したい場合は以下のように設定すればよいです。

Gemfile

gem 'rack-attack'
gem 'redis-activesupport'

config/application.rb

    config.middleware.use Rack::Attack

config/initializers/rack-attack.rb

class Rack::Attack
  cache.store = ActiveSupport::Cache::RedisStore.new('redis://localhost:6379/0/cache')

'redis://localhost:6379/0/cache' の 0はRedisのDBの番号、 cacheはnamespaceです。