【发布时间】:2018-02-01 20:13:33
【问题描述】:
我有 2 个文件 (yml.erb),我正在尝试将一个文件包含在另一个文件中。我面临的问题是生成的文件没有按要求正确格式化。
文件 1:主文件( test.yml.erb ,我试图在其中包含另一个文件)
type: map
mapping:
aaaaaaa:
type: str
bbbbbbbbbbb:
type: seq
sequence:
- type: map
mapping:
cccccccccc:
type: seq
sequence:
- type: map
mapping:
<%= ERB.new(File.read("#{Rails.root}/public/#{"hc.yml.erb"}")).result %>
文件 2:(我试图将这个文件包含在文件 1 中)
health_check:
type: map
name: HEALTH_CHECK
mapping:
path: { type: str, required: false }
grace_period: { type: int, range: { min: 30, max: 450}, required: false }
当我尝试使用
解析 Main.yml.erb 文件时ERB.new(File.read("#{Rails.root}/public/#{"test.yml.erb"}")).result)
结果:(查看 health_check 的格式)
type: map
mapping:
aaaaaaa:
type: str
bbbbbbbbbbb:
type: seq
sequence:
- type: map
mapping:
cccccccccc:
type: seq
sequence:
- type: map
mapping:
health_check:
type: map
name: HEALTH_CHECK
mapping:
path: { type: str, required: false }
grace_period: { type: int, range: { min: 30, max: 450}, required: false }
期待:
type: map
mapping:
aaaaaaa:
type: str
bbbbbbbbbbb:
type: seq
sequence:
- type: map
mapping:
cccccccccc:
type: seq
sequence:
- type: map
mapping:
health_check:
type: map
name: HEALTH_CHECK
mapping:
path: { type: str, required: false }
grace_period: { type: int, range: { min: 30, max: 450}, required: false }
注意:我需要解析生成的 YAML 文件,因此必须正确格式化。
【问题讨论】:
-
我不确定您的要求,但另一种选择是解析这两个文件,在 ruby 中添加内容,然后将结果导出到 YAML。看起来您正在尝试在 YAML 中做很多事情,而在 ruby 中处理问题可能更容易。
-
另一个想法,尝试用换行符和额外的间距替换换行符: File.read("#{Rails.root}/public/#{"hc.yml.erb"}").gsub( "\n", "\n\t\t\t\t")
-
我们正在使用 Kwalify 库来验证 YAML。由于该 YAML 文件越来越大,因此我将其分叉,因此满足上述要求。我面临的主要问题是 行没有在完全相同的位置被替换,因为结果 YAML 文件变得无效。
标签: ruby-on-rails ruby yaml erb