Rubyでyamlファイルに環境別の設定を書いて、さらにERBのコードを使えるようにする
環境別に設定を書く
yamlファイルに環境別の設定情報を書きたい。いわゆるconfig/database.ymlのようなファイル。default値を元に、development、productionなど実行環境ごとに違う設定情報を持たせたい。railsではどうやればいいんだろう。
ファイルとしてはこんな感じ。
default: &default
  author: '北村聡士'
 development:
  <<: *default
  #foo: dev
 test:
  <<: *default
  #foo: test
 production:
  <<: *default
  #foo: prodrailsのコードを見てみる
railsのconfiguration.rbを見てみた。
# Loads and returns the entire raw configuration of database from
      # values stored in `config/database.yml`.
      def database_configuration
        path = paths["config/database"].existent.first
        yaml = Pathname.new(path) if path
         config = if yaml && yaml.exist?
          require "yaml"
          require "erb"
          YAML.load(ERB.new(yaml.read).result) || {}
        elsif ENV["DATABASE_URL"]
          # Value from ENV['DATABASE_URL'] is set to default database connection
          # by Active Record.
          {}
        else
          raise "Could not load database configuration. No such file - #{paths["config/database"].instance_variable_get(:@paths)}"
        end
         config
      rescue Psych::SyntaxError => e
        raise "YAML syntax error occurred while parsing #{paths["config/database"].first}. " \
              "Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
              "Error: #{e.message}"
      rescue => e
        raise e, "Cannot load `Rails.application.database_configuration`:\n#{e.message}", e.backtrace
      end一行だった。これだけ。
YAML.load(ERB.new(yaml.read).result) || {}