LoginSignup
0
0

More than 3 years have passed since last update.

【RSpec】rack-attack gemをテスト環境では動作しないように設定する方法

Last updated at Posted at 2020-03-11

概要

  • rack-attack gemをテスト環境では動作しないように設定した方法です。

背景

  • rack-attack gemを使ってDoS攻撃対策を設定したところ、HTTPリクエスト関連でfailするようにRSpecを解消するのに詰まったので、こちらに解消法を共有します。

解消法

Gemfileの設定

まずはproductionstaging 環境でのみ、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日要しました。

  • 初めて触ったディレクトリの周りはエラーになったら真っ先に調べる必要がありますね。
    (振り返ってみると当たり前だけど、僕の場合は実際に調べていた時に調べたくなくて後回しにしてしまいがちだった :sweat_smile:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0