Railsローカル環境ではテスト用にこんな処理を書いて
本番環境では別の処理をさせたい、みたいに
環境ごとに処理を切り分けたいなーって時ありますよね?
今回はRailsで環境ごとに処理を分岐させる方法を紹介します。
結論
Rails.env
で今の環境が取得できます!
if Rails.env.production?
# 本番環境のみの処理
elsif Rails.env.development?
# 開発環境のみの処理
end
目次
環境
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という名前でサーバーを実行したい時の例です。
順番に見ていきましょう。
config/environments/staging.rb
を作成config/database.yml
にstagingを追加- 必要に応じて、
config/staging.yml.enc
を作成 - staging用のmigrate実行
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を追加
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
を作成
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
でアプリサーバーを起動
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
で設定値を取ってこれる という関係性を覚えておくだけでも、何かと便利です。