您的位置:首页 > 大数据 > 人工智能

rails yaml with expression or variable (Using ERB in YAML Configuration File)

2015-08-22 21:03 751 查看
A while back in Railscast #85 Ryan Bates demonstrated how to add a YAML-based configuration
file to a Rails application. You start with the configuration file — say
RAILS_ROOT/config/app_config.yml

containing your configuration data:

# config/app_config.yml
development:
key1: development value 1
test:
key1: test value 1
production:
key1: production value 1


And then you load the file from an initializer — say
RAILS_ROOT/config/initializer/load_config.rb

containing the following:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]


And from then on a Hash named
APP_CONFIG
will
be available throughout your application containing the configuration specific to the environment in which your application is running, i.e., development, test or production.

But what if you want to dynamically configure one or more values in your configuration file? Other YAML files loaded by Rails such as fixture files or
database.yml
are
processed through ERB before being loaded. Wouldn’t it be nice to be able to do the same in your application configuration file?

# config/app_config.yml
development:
key1: <%= # ruby code ... %>
test:
key1: <%= # ruby code ... %>
production:
key1: <%= # ruby code ... %>


As it is Rails will not process those ERB snippets, but you can change that with one small change to your initializer:

# config/initializers/load_config.rb
APP_CONFIG = YAML.load(ERB.new(File.read("#{Rails.root}/config/app_config.yml")).result)[Rails.env]


Now, instead of loading the file directly, YAML loads the string returned by
ERB#result
which
will contain the contents of the
app_config.yml
after
the ERB snippets have been evaluated.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: