概要
この記事は、Railsアプリケーションのrspec実行時や、本番デプロイの際に、時々起こる uninitialized constant Rack: :MiniProfiler
の解決方法について言及していきます。
エラー再現
エラーが起きる際の再現をしてみます。
注意点
よくあるパターンでやっているだけなので、違うパターンでも似たようなエラーを起きる可能性はあります。
development
の環境で開発をしている際、左上に出る計測表示を消したくなったとします。
「rails 左上 数字消す」みたいな感じで検索したとします。
その中で見つけた解決策を試してみます。
config/initializers
配下に rack_profile.rb
を作成します。
Rack::MiniProfiler.config.start_hidden = true
その後同じようにアプリを起動して左上を確認します。
「やったーー!! 邪魔者がいなくなったぞ!!!」
その後しばらく経って rspec
を通そうとします。
~ TodoApp $ bundle exec rspec spec/ --format documentation
そうすると下記のエラーが出て一個も rspec
が通りません。
NameError:
uninitialized constant Rack::MiniProfiler
Did you mean? MiniMime
エラー原因
これは、 config/initializers
配下に rack_profile.rb
を作成し、下記の記述をしているのが原因です。
Rack::MiniProfiler.config.start_hidden = true
config
フォルダは、アプリケーション起動時に読み込まれるようになっているのですが、 development
環境でも、test
環境でも同様に rack_profile.rb
を読み込みに行きます。
そして、railsアプリケーションの作成時の Gemfile
の状態では、 development
環境でのみ rack-mini-profiler
を追加するという設定にしていると思います。
下記のような感じです。
group :development do
(省略)
gem 'rack-mini-profiler', '~> 2.0'
(省略)
end
そのせいで、test環境でアプリが起動されると、rack_profile.rb
を読み込んだ際に、 rack-mini-profiler
って知らないぞ!!ってエラーが出てると認識しています。(解釈間違ってたらすみません。)
解決方法
解決方法はいくつかあります。
development環境でのみ読み込む。
作成してあった rack_profile.rb
の記述を下記のように変更し、 development
環境でのみ設定が読み込まれるようにします。
if Rails.env.development?
Rack::MiniProfiler.config.start_hidden = true
end
rack-mini-profilerをそもそも追加しない
まずは、作成してあった rack_profile.rb
は必要なくなるので、削除してください。
その後、Gemfileから、rack-mini-profiler
の記述を消して、 bundle install
します。
group :development do
(省略)
- gem 'rack-mini-profiler', '~> 2.0'
(省略)
end
参考文献
おわりに
今回は、時々見るエラーについて解説をしました。
エラーを解決する際にその場の解決ではなく、恒久的な解決になるのかを意識するといいなと改めて感じました。
どこかの誰かのためになれば、幸いです。
余談ですが、Qiitaの記事にもできないようなしょうもない内容の記事を、自分のブログにあげていたりするので見ていただけると嬉しいです。