You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails如何生成带点开头键的无引号YAML文件?

解决Ruby生成YAML时以点开头的键自动加双引号的问题

Ruby默认使用的YAML解析器Psych,会对它判定为“非安全”的键自动添加双引号,以点开头的键就属于这类情况。要生成不带引号的目标格式,有两种处理方式:

方法一:通过Psych配置关闭自动引号(推荐)

在调用to_yaml时传入quoted_keys: false参数,强制关闭键的自动引号行为。同时建议把文件打开模式从r+改为w,避免原有内容残留导致格式混乱:

pipeline_file = { 
  ".before_script_template" => {"before_script" => ["gem install bundler"]}
}

File.open("./my_project/folder/.gitlab-ci-template.yml", "w") do |f|
  # 传入参数关闭自动引号,再移除默认的---头
  f.write(pipeline_file.to_yaml(quoted_keys: false).gsub(/^---$/, ""))
end

这个选项在Ruby 3.0及以上版本的Psych中支持,是最规范的解决方式。

方法二:手动替换引号(备选,仅旧版本Ruby使用)

如果你的Ruby版本不支持quoted_keys参数,可以通过字符串替换去掉键的双引号,但这种方式存在一定风险(比如键本身包含引号时会出错),仅作为临时方案:

pipeline_file = { 
  ".before_script_template" => {"before_script" => ["gem install bundler"]}
}

yaml_content = pipeline_file.to_yaml.gsub(/^---$/, "").gsub(/"\.(.*?)":/, '.\1:')

File.open("./my_project/folder/.gitlab-ci-template.yml", "w") do |f|
  f.write(yaml_content)
end

运行修改后的代码,就能生成你期望的不带双引号的YAML格式:

.before_script_template:
  before_script:
    - gem install bundler

内容的提问来源于stack exchange,提问作者jsaez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:20:44