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
相关产品推荐
相关产品推荐

