Ruby on Rails

【Rails】development? production? 開発環境ごとに処理を切り分けたい時

Railsローカル環境ではテスト用にこんな処理を書いて
本番環境では別の処理をさせたい、みたいに
環境ごとに処理を切り分けたいなーって時ありますよね?

今回はRailsで環境ごとに処理を分岐させる方法を紹介します。

結論

Rails.env で今の環境が取得できます!

if Rails.env.production?
  # 本番環境のみの処理

elsif Rails.env.development?
  # 開発環境のみの処理

end

目次

  1. 結論
  2. 環境
  3. Railsで用意されている環境
    1. 環境を追加したい場合
    2. config/environments/staging.rb を作成
    3. config/database.yml にstagingを追加
    4. config/staging.yml.enc を作成
    5. staging用のmigrate実行
    6. RAILS_ENV=staging でアプリサーバーを起動
  4. まとめ

環境

Vagrant上にCentOSを入れ、Railsは6.0.3を使用しています。
他のバージョンのRailsでも同様の方法で分岐できますので、あんま気にしなくて大丈夫です。

OS: Mac
メモリ: 32GB

Dependents
Rails 6.0.3
Ruby 2.7.2
CentOS7 on Vagrant
Mysql 5.7

Railsで用意されている環境

Railsでアプリを作成すると
development、test、productionの3つの環境を切り分けて作ることができます

  • development – 開発環境
  • test – テスト環境
  • production – 本番環境

それぞれの細かい説明は省きますが
ゴリゴリ実装進めていく環境と、本番に近い状況でテストする環境と、デプロイして実際にユーザーが動かせる環境、という感じですね。

環境を追加したい場合

記事の本題と少しずれますが
これらの環境は任意の名前に変更・追加することも可能です。

例えば、stagingという名前でサーバーを実行したい時の例です。
順番に見ていきましょう。

  1. config/environments/staging.rb を作成
  2. config/database.yml にstagingを追加
  3. 必要に応じて、config/staging.yml.enc を作成
  4. staging用のmigrate実行
  5. RAILS_ENV=staging でアプリサーバーを起動

config/environments/staging.rb を作成

config/environments/ のディレクトリには環境ごとの設定ファイルが入っています。
デフォルトで、development.rb、production.rb、test.rbの3ファイルがあり
これが各環境に対応している設定ファイルです。

今回は新しくstaging という環境を追加したいので
どれかをコピーして、staging.rb を作成します。
※作成する環境に合わせて、staging.rbの内容は変更しましょう。

config/database.yml にstagingを追加

環境を追加するということは、その環境用のDBも作成する必要があります。
database.ymlにstaging用の設定を記述しましょう。

staging:
  adapter: postgresql
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: staging
  password: password
  host: localhost
  timeout: 5000
  database: staging_database

こちらも設定する項目自体は、developmentやdefaultに大体用意されているので、それをコピーしてきて設定値を変更します。

config/staging.yml.enc を作成

以下、Rails 6系を使用している場合です。
config/credentials.yml.enc というファイルをコピーして、staging.yml.enc を作成。
staging用のキーを作成して、中身を書き換えておきます。

※Rails5.1系ではsecrets.yml というファイル名、5.2系ではcredentials.yml というファイル名だったりと
この辺りはRailsのバージョンに応じて、設定方法が異なりますので詳しくは別の方の記事など参考にしてみてください。

staging用のmigrate実行

設定ファイルも用意できましたので、DBを作成します。
RAILS_ENVでstagingを指定してmigrateを実行します。

bundle exec rake db:create RAILS_ENV=staging
bundle exec rake db:migrate RAILS_ENV=staging

RAILS_ENV=staging でアプリサーバーを起動

DBも作成できたら、アプリサーバーを起動します。
こちらも同様に、RAILS_ENVオプションをつけて実行します。

rails s RAILS_ENV=staging

今回はVagrant上に、プライベートIPでRails環境を作成しているので
IPを指定して実行したりします。

rails s -b 192.168.50.10 RAILS_ENV=staging

以上で、環境の追加手順は終わりです。
簡単なメモになってしまいましたが、credential周りなどRailsのバージョンごとに設定方法が変わってきたりもしますので、注意してください。

まとめ

今回は、Railsの環境ごとに処理を切り分ける方法と
環境の追加方法を紹介しました。

実際書く時はこんな感じで、最後にelseを追加しておいてデフォルトの処理を入れておくとエンバグ防止にもなるかもしれません。

if Rails.env.production?
  # 本番環境のみの処理

elsif Rails.env.development?
  # 開発環境のみの処理

else
  # デフォルトの処理

end

環境の追加は、実際行う機会は少ないかもしれませんが
config/enviroments/ 配下に設定ファイルがあり
Rails.env で設定値を取ってこれる という関係性を覚えておくだけでも、何かと便利です。

ピックアップ記事

  1. 【Blender】MMDファイルをBlenderにImportするアドオン
  2. git add -p でファイルの一部をコミットする【Git】
  3. 【Rails】modelを作成する
  4. 【Blender】レンダリング結果を新規ウィンドウで開かないようにする
  5. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入

関連記事

 
  1. Ruby on Rails

    【Rails】Factory already registered: エラー

    railsでアプリ開発中、最新のfeatureブランチでリベースして…

  2. Ruby on Rails

    【Rails】migrationでカラムを追加・削除したい

    migrationファイルでよく使う記述。テーブルにカラムを追加・削…

  3. Ruby on Rails

    【Rails】selectメソッドで特定の条件を満たす要素を取得する

    selectは、配列に対してブロック内の条件を評価し、真になって要素を…

  4. Ruby on Rails

    【Rails】RSpecのお作法メモ

    RSpecを書く機会が増えてきたので、記法の備忘録として記事にします…

  5. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する

    オブジェクトの中身をデバッグしたりする時に便利出力結果をみやすい形に…

カレンダー

2022年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の記事

  1. gitでファイル変更の一部をコミットする
  1. 慣れれば3分!Bumpノードを使用した質感表現の方法

    Blender

    【Blender】Bumpを使用した質感表現の方法
  2. WordPress

    【WPテーマ自作】UnderScoresの導入
  3. Blender

    【Blender】起動時に強制終了してしまう問題
  4. Ruby on Rails

    【Rails】selectメソッドで特定の条件を満たす要素を取得する
  5. Blenderの複数バージョンを簡単に管理できるBlenderLauncherの使い方

    Blender

    【Blender】複数バージョンを簡単に管理できる、BlenderLaunche…
PAGE TOP