[英]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
它将返回您想要的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.