Rails 4 - Yaml配置文件

Mat*_* M. 2 ruby-on-rails ruby-on-rails-4

我有这个文件 config/application.yml

settings:
  info:
    name: MyAppName
    domain: example.com
  contact:
    email: mail@example.com
    phone: 1234567890
Run Code Online (Sandbox Code Playgroud)

environment.rb我有这个

AppConfig = YAML::load_file('config/application.yml')
Run Code Online (Sandbox Code Playgroud)

所以现在我可以通过使用来访问它 AppConfig["settings"]["info"]["name"]

我如何通过使用来访问它AccConfig.settings.info.name

没有任何宝石!

whi*_*kid 6

如果您使用的是Rails 4.2或更高版本,则可以使用config_for配置文件.它们需要放在/ config文件夹下.(没有尝试过)

在你的情况下,它将是: config = Rails.application.config_for(:application)

这是更加清晰和Rails方式将配置加载到应用程序中.

然后,您可以使用OpenStruct为其启用点表示法.

APP_CONFIG = OpenStruct.new(config)


ste*_*son 6

这是一个没有任何宝石的简单方法,但如果你经常这样做,我不确定性能.

我们的想法是先将数据转换为JSON,然后将JSON解析为OpenStruct(内置于Ruby中):

json_data = YAML::load_file('config/application.yml').to_json
data = JSON.parse(json_data, object_class: OpenStruct)
Run Code Online (Sandbox Code Playgroud)

这将深深地将所有哈希转换为OpenStructs并正确处理数组.

举个例子,如果我有这个YAML:

people:
  -
    name: 'Jerry Rasmussen'
    address:
      address_1: '123 Street St'
  -
    name: 'Sara DeWetzel'
Run Code Online (Sandbox Code Playgroud)

然后它可以像这样加载和使用:

json_data = YAML::load_file('config/people.yml').to_json
data = JSON.parse(json_data, object_class: OpenStruct)

data.people.first.name
 => Jerry Rasmussen
data.people.first.address.address_1
 => 123 Street St
Run Code Online (Sandbox Code Playgroud)