【问题标题】:Unable to Load one yml.erb file in another yml.erb无法在另一个 yml.erb 中加载一个 yml.erb 文件
【发布时间】: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


【解决方案1】:

我设法缩进,以便生成的 YAML 文件格式正确,但我希望有更好的方法来做同样的事情。这是我的解决方案,效果很好

&lt;%= ERB.new(File.read("#{Rails.root}/public/#{"hc.yml.erb"}")).result.gsub!(/\n/, "\n#{"\s" * 20}") %&gt;

基本上我格式化了“包含”yaml 文件,以便与主 yaml 对齐。

【讨论】:

    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2012-05-23
    • 2012-05-24
    • 2021-08-26
    相关资源
    最近更新 更多