Я бы настоятельно рекомендовал перенести конфигурацию на что-то вроде YAML. Он сделан простым для понимания, гибким, универсально реализованным, хорошо документированным как в виде стандарта , так и в качестве части базовой библиотеки и простым для понимания. (Да, я специально сказал это дважды.)
Мои файлы YAML загружаются в Ruby в виде хэша, когда я делаю что-то вроде:
require 'yaml'
config = YAML.load_file('/path/to/config/file')
Я создам исходный шаблон для файла конфигурации в Ruby как Hash, затем сериализую его и запишу на диск. Таким образом, я знаю, что то, что находится на диске, именно так, как того хочет YAML, и помогает мне избежать того, что «оно не будет загружаться, потому что либо данные неверны, либо код неверен».
# A simple round-trip (load and dump) of an object.
require 'yaml'
test_obj = {
'foo' => 'bar',
'one_two_three' => [1, 2, 3],
'hash' => {'another' => 'hash'}
} #=> {"foo"=>"bar", "one_two_three"=>[1, 2, 3], "hash"=>{"another"=>"hash"}}
File.open('./config.yaml', 'w') { |fo| fo.puts YAML::dump( test_obj ) } #=> nil
ruby_obj = YAML::load_file( './config.yaml' ) #=> {"foo"=>"bar", "one_two_three"=>[1, 2, 3], "hash"=>{"another"=>"hash"}}
ruby_obj == test_obj #=> true
require 'pp'
pp ruby_obj
{"foo"=>"bar", "one_two_three"=>[1, 2, 3], "hash"=>{"another"=>"hash"}}
pp test_obj
{"foo"=>"bar", "one_two_three"=>[1, 2, 3], "hash"=>{"another"=>"hash"}}