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

 
    
Top comments (2)
Hi there,I heard that the software industry in Japan is not developed,is that true?
No, it's not true.