繁体   English   中英

Rails 4 - Yaml配置文件

[英]Rails 4 - Yaml configuration file

我有这个文件config/application.yml

settings:
  info:
    name: MyAppName
    domain: example.com
  contact:
    email: mail@example.com
    phone: 1234567890

environment.rb .rb我有这个

AppConfig = YAML::load_file('config/application.yml')

所以现在我可以使用AppConfig["settings"]["info"]["name"]

如何使用AccConfig.settings.info.name访问它?

没有任何宝石!

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

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

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

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

APP_CONFIG = OpenStruct.new(config)

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

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

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

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

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

people:
  -
    name: 'Jerry Rasmussen'
    address:
      address_1: '123 Street St'
  -
    name: 'Sara DeWetzel'

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

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

没有内置的方法将Hash转换为可通过点语法访问的构造。 您可以使用像settingslogic gem这样的gem并将其指向您的application.yml文件,或者查看源代码以找出完成此操作的过程。 我认为最简单和最强大的方法是使用流行的(阅读:在野外经过良好测试)和有充分记录的宝石与滚动自己的宝石。

# app/models/settings.rb
class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml"
  namespace Rails.env
end

然后,您可以通过访问各个设置

Settings.info.name
# MyAppName

您可以使用recursive-open-struct gem

app_config = YAML.load_file('config/application.yml').with_indifferent_access
ros = RecursiveOpenStruct.new(app_config)

puts ros.settings.info.name # MyAppName

你可以安装hash dot gem

然后,使用以下代码。

require 'hash_dot'
AppConfig = YAML::load_file('config/application.yml')

而且,现在打电话

AppConfig.settings.info.name

它将返回您想要的输出。

你可以看看rails native

ActiveSupport :: OrderedOptions <哈希

你仍然需要使用某些功能转换你的哈希值,但作为一个起点,如果你真的不想要任何宝石。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM