【開発・テスト・本番環境の違い】デプロイ作業での失敗
✒️失敗したこと
Gemfile でMysqlの記述を本番環境でしか使わないのに、普通に書いてしまった。
このことで、本番環境でしか使わないgemを全環境でインストールしていしまい、不要なgemがインストールされ、開発環境でエラーになってしまった。
gem 'mysql2', '~> 0.5.3'
正しくはこう書く。
group :production do
# ここに書く
end
✅do〜end(ブロック)
Gemfileでdo〜endを書くと、「この環境だけでこのgem使う」と指定できる。
何も囲まないと、全部の環境でインストールされる。
group :(環境名) do
# ここに書く
end
下記は、「development(開発環境)」と「test(テスト環境)」の両方で使用するGemをまとめて指定している。
group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
環境名は、下記のように書く。
- development(開発環境)
- test(テスト環境)
- production(本番環境)
下記は、Gemfile
のGemの中で、本番環境(production)を除いて、それ以外をインストールする。
bundle install --without production
下記は、コマンドは、Rails サーバーを本番環境(production)で起動させる。
-e
は、「environment」の意味。環境を指定するためのコマンド。
rails s -e production
参考文献:Ruby on Rails チュートリアル 2.1アプリケーションの計画
✅開発環境(development)
アプリケーションの開発、コード変更を行う。
今まで使ってた環境。
✅テスト環境(test)
テストスクリプト(RSpecやMinitestなど)を実行して、アプリケーションが正しく動作するかを確認する環境。RAILS_ENV=test
という設定を使うと、その環境で動作
物理的にどこかに存在するのではなく、RAILS_ENV=test と指定するときに動作する環境。
Railsアプリの test フォルダは、自動テストに関するファイルが格納されている場所。
testフォルダは、テストを記述するコードやセットアップを管理するものであり、環境そのものではない。
ここが開発環境と違う!
データベースは「テスト専用」のものが使われ、テスト実行ごとにリセットされる。
自動テストや**CI/CD(継続的インテグレーション)**で使われることが多い。
✅本番環境(production)
実際にユーザーに提供するアプリケーションを動かす環境。
✅RAILS_ENV
RAILS_ENV
は、Rails アプリケーションの動作環境(環境設定)を指定するための環境変数。
これをつけてコマンドをうつと、「Railsの○○の環境を指定して処理するよ」となる。
RAILS_ENV=production
は、Railsの本番環境を指定している。
RAILS_ENV=production
🐥学び
「production」など、環境名がわかっていなかったため、なんとなくコマンドやコードを書いてしまっていた。
デプロイ後は間違えるとかなりめんどくさい!
どこに何を書くか、本番ではどうなのか?を意識して、注意深く進める必要あり。
焦らないこと!!!
あと、年末年始でばたばたしてしまったため、急いで進めてしまった。
メンターの方に進み早いと言われてるくらいなので、無理して急いでやらないようにする。
ばたばたするくらいなら、そもそも予定を詰めすぎないよう、取捨選択・優先順位の決定も覚える。
Discussion