ケース:本番環境がINFOであるのに対し、開発環境のログレベルはDEBUGです。すべてのデフォルトのログ構成を使用し、environment==develomentの場合にのみレベルを上書きしたいと思います。
問題:第1レベルの構成は上書きできますが、サブレベルは上書きできません。
サンプルコードを検討してください。
#file: config.rb
default = Configuration.for('default'){
log {
file '/tmp/foo.log'
level 'WARN'
freq 'daily'
}
}
development = Configuration.for( 'development', default) {
log {
level 'DEBUG'
}
}
メインファイルでは、上記のコードを次のように使用します
# main.rb
require 'config.rb'
$CONFIG = Configuration.for $DEV_ENV # either ('default' || 'development')
p $CONFIG.log.freq
メソッドが見つからないというエラーが発生します:
`undefined method `freq' for #<Configuration:0x00000003a65d80> (NoMethodError)`
私が持っている唯一の(醜い)解決策は、次のようにファイルと周波数の値をデフォルトに戻すことです:
log {
file default.log.file
level 'DEBUG'
freq default.log.freq
}
EEWWW !! 不快な!
他に何か提案はありますか?私はSettingsLogicとConfigatronを使ってこのようなものを実装しようとしましたが無駄になりました。Rubyの上位3つの構成gemがあります。自分で作る必要がありますか?これは本当にそのようなエキゾチックな例ですか?
あなたのフィードバックや提案が大好きです。