外部に公開できない秘密の文字列に関して
rails 4.1でrails newするとconfig/secrets.ymlが生成されます。秘密の文字列を集約する場所です。本番環境は環境変数経由でアクセスする必要があります。
development:
secret_key_base:
test:
secret_key_base:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
rails 5.1ではconfig/secrets.yml.encというファイルに暗号化した内容を記載します。暗号化した内容は復号化する必要があるので、復号化時に使用するキー(RAILS_MASTER_KEY)だけを別で管理するだけなので、管理コストが下がります。
config/secrets.yml.encはrails new時に作成されないので、別途コマンド($rails secrets:setup)で作成します。config/secrets.yml.encとconfig/secrets.yml.keyが出力されます。
config/secrets.yml.keyが暗号化、復号化に利用する値です。コミットしないように.gitignoreへ追加されます。
secrets.yml.encは暗号化されているので直接編集できません。編集するときは$ rails secrets:editで編集します。記述フォーマットはsecrets.ymlと同じです。
本番環境ではconfig.read_encrypted_secrets = trueの設定が有効になっているので、復号キーを使ってsecrets.yml.encを読み込む設定が有効になっています。
開発環境などでは有効になっていないので、config/environments/development.rbに、config.read_encrypted_secrets = trueと記述する必要があります。
環境変数ごとで値を切り替える必要がなくなりました。
credentialsで登場するファイルや環境変数
config/credentials.yml.enc(暗号化した設定ファイル)config/master.key(コミットしないファイル、.gitignoreに追加されている)RAILS_MASTER_KEY(master.keyの値を環境変数経由で渡す場合の環境変数名)