はじめに
RSpecが403エラー(存在はしてるけど、アクセスできないよ!)を返して、テストが実行できない事態に襲われたことがありました。
原因はDockerfileで"RAILS_ENV"に開発環境を設定していたことにより、RSpecが開発環境で実行されるように記述されていたことでした。
RAILS_ENV: development
ENV['RAILS_ENV'] ||= 'test'
#修正後
ENV['RAILS_ENV'] = 'test'
エラーを解消することができてよかったのですが、よく目にする3つ環境(本番/開発/テスト環境)の違いがいまいちわかっておらず、解決後もピンときてなかったので、調べてみました。
備忘録として残そうと思います。
開発環境 (config/environments/development.rb)
appディレクトリ以降のファイルに変更があった時に、自動で読み込んでくれる。
例えば、controllerの記述を変更したり、viewの記述を変更するとすぐ読み込んで反映してくれたりする。
実装後すぐに確認ができて、開発をスムーズに進められるように設定がされた環境。
本番環境 (config/environments/production.rb)
開発環境と違い、ファイルを変更すれば自動反映などを行わない。
その代わり開発環境に比べて軽量に動いてくれる。
デプロイの際に変更が反映される。
テスト環境 (config/environments/test.rb)
テストを実施するために設定がされている環境。
開発環境とテスト環境を分けることで、テストのたびに開発環境の設定をテストが実施できるように変更を加える必要がなくなる。
終わりに
すごくざっくりしたまとめ方ですが、概要はなんとなく理解できました。
どんな設定がされてるかconfig/environments/~のファイルを今度覗いてみようかなと思います。
また、書いている内容が間違っていたら優しくご指摘くださると嬉しいです。
調べる前は、全部開発環境でやっちゃえばいいじゃん!と思っていたのですが、当たり前ですがちゃんと理由があって環境は分けられているんですね。