Railsで環境変数を管理する方法

May 18, 2020

環境変数を設定する方法をいろいろ調べました。その際のメモです。

Multi environment credentials を利用する方法

bin/rails credentials:edit --environment=development
bin/rails credentials:edit --environment=staging
bin/rails credentials:edit --environment=production

これにより、資格情報ファイル config/credentials/staging.yml.enc とステージング固有の暗号化キーが作成され、資格 config/credentials/staging.key 情報ファイルがテキストエディターで開きます。

aws:
  access_key_id: "STAGING_KEY"
>> RAILS_ENV=staging rails c
pry(main)> Rails.application.credentials.aws[:access_key_id]
=> "STAGING_KEY"

参考

https://github.com/rails/rails/pull/33521

gem(dotenv-rails)を利用する方法

管理方法

.envに環境変数を記載します。公開されても問題ない設定だけ Git に登録します。

.env
HOSTNAME = "Hello App"
RAILS_MAX_THREADS = 5

環境ごとにファイルを分けることができます。

  • .env.development: 開発環境用
  • .env.test: test 環境用
  • .env.stating: staging 環境用
  • .env.production: 本番環境用
$ bin/rails console
> ENV['HOSTNAME']
=> "Hello App"

導入方法

Gemfile
gem 'dotenv-rails', groups: [:development, :test]
$ bundle

利用方法

HOSTNAME = ENV['HOSTNAME']
database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>