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.