5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails credentials.yml.encと環境変数の併用

Last updated at Posted at 2018-12-17

Rails 5.2 から暗号化された config/credentials.yml.enc が導入され、混乱を招いている。開発の都合上、development, test では環境変数を使って、production (または stagingなど)encrypted credentials を使えるように、config/environment.rb にクラス Envを導入してみた。

Env.rb
class Env
  def self.method_missing(name, *default)
    ENV[name.to_s] ||
      default.first ||
      Rails.application.credentials.send(name) ||
      super
  end

  def self.respond_to_missing?(*)
    true
  end
end

使い方

システム構成情報は、環境変数またはconfig/credentials.yml.encに設定する。Env.APP_CONFIGAPP_CONFIG をまず環境変数 ENV から探して、未設定の場合に encrypted credentials から探す。なお、引数にデフォルトの値が与えられたら、encrypted credentials からは探さない。

サンプルをGitHubに載せている。

config/credentials.yml.enc の内容確認

$ RAILS_MASTER_KEY=289e1431050b365b62bb5917acabcc53 rails credentials:show
secret_key_base: 2105bc31227a27f81b901582a8bb43b35bebea2b9c3572b024184a0b06dad26fc3bb312fbc5a7069783798d22f55cf4f411ae19169dd2a78026dccfbbdc889d7
APP_CONFIG: encryptedConfig

環境変数が未定義の場合、デフォルト値が使われる

$ rails runner 'puts Env.APP_CONFIG("default")'
default

環境変数がデフォルト値よりも優先される

$ APP_CONFIG=envVar rails runner 'puts Env.APP_CONFIG("default")'
envVar

環境変数が、encrypted credentials よりも優先される

$ RAILS_MASTER_KEY=289e1431050b365b62bb5917acabcc53 APP_CONFIG=envVar rails runner 'puts Env.APP_CONFIG("default")'
envVar

デフォルト値が encrypted credentials よりも優先される

$ RAILS_MASTER_KEY=289e1431050b365b62bb5917acabcc53 rails runner 'puts Env.APP_CONFIG("default")'
default

環境変数もデフォルト値も未定義の場合、encrypted credentials が使われる

$ RAILS_MASTER_KEY=289e1431050b365b62bb5917acabcc53 rails runner 'puts Env.APP_CONFIG'
encryptedConfig

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?