🤔

【開発・テスト・本番環境の違い】デプロイ作業での失敗

2025/01/22に公開

✒️失敗したこと

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