【发布时间】:2018-04-11 08:46:43
【问题描述】:
我遇到了一个我还没有找到有效解决方案的问题。
我有用于环境的 YAML 配置文件,我们称之为 development.yml。
此文件用于创建应更新的哈希:
data = YAML.load_file(File.join(Rails.root, 'config', 'environments', 'development.yml'))
我想要完成的是这些方面的事情。假设我们有一个排序元素
data['server']['test']['user']
data['server']['test']['password']
我想要的是:
data['server']['test']['user'] = #{Server.Test.User}
data['server']['test']['password'] = #{Server.Test.Password}
这个想法是为每个值创建一个占位符,该占位符是该值的动态键映射,一直到哈希的最后一级,并将该值替换为该值的映射,连接键。
抱歉,这并不能解决我的问题。位置data['server']['test']['user'] 将动态构建,通过将通过嵌套哈希的循环。我发现这样做的唯一方法是将哈希的当前迭代的键附加到字符串中。最后,我有一个类似"data['server']['test']['name']" 的字符串,我正在考虑将其转换为变量data['server']['test']['name'],然后将值分配给该变量#{Server.Test.Name}。阅读我的问题,我不确定这是否清楚,我希望这有助于澄清它。
输入样本:
api: 'active'
server:
test:
user: 'test'
password: 'passwordfortest'
prod:
user: 'nottest'
password: 'morecomplicatedthantest'
在这种情况下,最终的结果应该是这样更新这个yml文件:
api: #{Api}
server:
test:
user: #{Server.Test.User}
password: #{Server.Test.Password}
prod:
user: #{Server.Prod.User}
password: #{Server.Prod.Password}
这听起来很傻,但我想不出办法。
【问题讨论】:
-
旁注:
data['server']['host'] = #{Server.Host}和data['server']['host']['user'] = #{Server.Host.User}不能同时使用。 -
谢谢,@mudasobwa。我解决了我的问题。