概要
- rack-attack gemをテスト環境では動作しないように設定した方法です。
背景
- rack-attack gemを使ってDoS攻撃対策を設定したところ、HTTPリクエスト関連でfailするようにRSpecを解消するのに詰まったので、こちらに解消法を共有します。
解消法
Gemfileの設定
まずはproduction
と staging
環境でのみ、rack-attackを導入するように修正します。
group :production, :staging do
gem 'rails_12factor'
# DoS攻撃対策
gem 'rack-attack'
end
configの設定
次にconfigで、どの環境ではrack-attackを使用するかを設定します。
# config/application.rb
(省略)
module Sample
class Application < Rails::Application
(省略)
config.middleware.use Rack::Attack # こちらを削除
end
end
# config/environments/production.rb
Rails.application.configure do
(省略)
config.middleware.use Rack::Attack # こちらを追記
end
# config/environments/staging.rb
Rails.application.configure do
(省略)
config.middleware.use Rack::Attack # こちらを追記
end
config/initializers/rack-attack.rb の設定
最後にRailsの環境ごとに、config/initializers
に設定しているrack-attack.rb
を読み込むかどうかを設定します。
# config/initializers/rack-attack.rb
if Rails.env.production? || Rails.env.staging? # こちらのif文を追記
class Rack::Attack
throttle('req/ip', limit: 60, period: 1.minutes) do |req|
req.ip unless req.path.start_with?('/assets')
end
end
end
これでテスト環境ではrack-attack gem
が動作しないように設定ができました。
振り返り
config/initiazilers
配下にファイルを作成したことがなかったので、こちらの配下ファイルでも環境ごとに読み込むかどうかの設定が必要
だと気づくのに丸1日要しました。初めて触ったディレクトリの周りはエラーになったら真っ先に調べる必要がありますね。
(振り返ってみると当たり前だけど、僕の場合は実際に調べていた時に調べたくなくて後回しにしてしまいがちだった)