如何在 Ruby 中的 YAML 文件中包含 YAML 文件

     2023-02-26     142

关键词:

【中文标题】如何在 Ruby 中的 YAML 文件中包含 YAML 文件【英文标题】:How to include a YAML file inside a YAML file in Ruby 【发布时间】:2011-01-17 16:57:17 【问题描述】:

在 YAML 中是否有自定义标签,让 ruby​​ 可以在 YAML 文件中包含 YAML 文件?

#E.g.:  
--- !include
filename: another.yml

前段时间有人问过similar 的问题,但没有相关答案。

我想知道是否有一些用于 Ruby 的自定义标记,类似于用于 Python 的this。

【问题讨论】:

How can I include an YAML file inside another?的可能重复 【参考方案1】:
    !include 不是指令而是标签。

    它不是 Python(或 PyYAML)的一个特性,而是“poze”库的一个特性:

    poze.configuration 公开了一个名为 include 的默认指令。

    YAML 规范没有定义这样的标准标签。

【讨论】:

YAML 规范没有标签 !include。我希望有人编写了一个类似于“poze”库中的自定义标签的自定义标签。我想是时候自己编写自定义标签了:-)【参考方案2】:

我找到了一种使用 ERB 来解决我的场景的方法。

我猴子修补了 YAML 模块以添加两个新方法

module YAML
    def YAML.include file_name
      require 'erb'
      ERB.new(IO.read(file_name)).result
    end

    def YAML.load_erb file_name
      YAML::load(YAML::include(file_name))
    end  
end

我有三个 YAML 文件。

mod1_config.yml

mod1:
    age: 30
    city: San Francisco

mod2_config.yml

mod2:
    menu: menu1
    window: window1

all_config.yml

<%= YAML::include("mod1_config.yml") %>
<%= YAML::include("mod2_config.yml") %>

使用方法YAML::load_erb而不是方法YAML::load来解析yaml文件。

  config = YAML::load_erb('all_config.yml') 
  config['mod1']['age'] # 30
  config['mod2']['menu'] # menu1

注意事项:

    不支持文档合并 最后一个包含覆盖同名键

【讨论】:

我收到错误private method 'include' called for Psych:Module (NoMethodError) 任何猜测我该如何解决?我在initializers/yaml.rb 中添加了 YAML 模块【参考方案3】:

看你需要什么。如果需要传输文件,可以base64编码内部yaml文件。

【讨论】:

【参考方案4】:

如果您的目标是避免 YAML 文件中的重复,不一定包括外部文件,我建议您这样做:

development: &default
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: db_dev
  pool: 5
  username: usr
  password: psw
  host: localhost
  port: 3306

dev_cache:
  <<: *default

new:
  <<: *default
  database: db_new

test:
  <<: *default
  database: db_test

【讨论】:

您可能需要YAML::ENGINE.yamler = 'syck' 才能工作***.com/a/6140900/414220【参考方案5】:

我正在使用这个:

load_config.rb(初始化程序)

cf_1 = YAML::load(File.read("/etc/my_app/config.yml"))
cf_2 = YAML::load(File.read(File.join(Rails.root, "config", "config.yml")))
CONFIG = cf_1.merge(cf_2)

稍后,您可以通过以下方式访问配置值:

CONFIG['value']

【讨论】:

【参考方案6】:

如果您在 Rails 中,YAML 可以包含 ERB。

将它们组合在一起,您可以使用&lt;%= %&gt; 包含另一个文件:

database.yml

<% if File.exists?('/tmp/mysql.sock') %>
<%= IO.read('config/database.mysql.yml') %>
<% else %>
<%= IO.read('config/database.sqlite.yml') %>
<% end %>

database.sqlite.yml

sqlite: &defaults
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *defaults
  database: db/development.sqlite3

test:
  <<: *defaults
  database: db/test.sqlite3

production:
  <<: *defaults
  database: db/production.sqlite3

database.mysql.yml

development:
  adapter: mysql2
  # ... the rest of your mysql configuration ...

【讨论】:

【参考方案7】:

如果你只是想从另一个 YAML 文件继承,有一个 gem 通过扩展 ruby​​ YAML 库来提供你所要求的这个功能:

https://github.com/entwanderer/yaml_extend

https://rubygems.org/gems/yaml_extend

用法

yaml_extend 将 YAML#ext_load_file 方法添加到 YAML。

此方法的工作方式与原始 YAML#load_file 类似,通过文件继承对其进行扩展。

示例

# start.yml
extends: 'super.yml'
data:
    name: 'Mr. Superman'
    age: 134    
    favorites:
        - 'Raspberrys'

-

# super.yml
data:
    name: 'Unknown'
    power: 2000
    favorites:
        - 'Bananas'
        - 'Apples'

基本继承

YAML.ext_load_file('start.yml')

结果

data:
    name: 'Mr. Superman'
    age: 134
    power: 2000
    favorites:
        - 'Bananas'
        - 'Apples'
        - 'Raspberrys'

【讨论】:

Ruby on Rails 4:如何在 Rails Web 应用程序中包含 Javascript 文件?

】RubyonRails4:如何在RailsWeb应用程序中包含Javascript文件?【英文标题】:RubyonRails4:HowtoincludeJavascriptfilesinRailswebapplication?【发布时间】:2014-04-1309:51:18【问题描述】:我正在构建一个Rails4Web应用程序,我想在我的应用程序中包含... 查看详情

为啥 Ruby 的 bcrypt 库在哈希中包含明文中的盐? [复制]

】为啥Ruby的bcrypt库在哈希中包含明文中的盐?[复制]【英文标题】:WhydoesRuby\'sbcryptlibincludethesaltinplaintextinthehash?[duplicate]为什么Ruby的bcrypt库在哈希中包含明文中的盐?[复制]【发布时间】:2014-11-1204:38:37【问题描述】:我正在使... 查看详情

从单独的文件中包含一个 Ruby 类

】从单独的文件中包含一个Ruby类【英文标题】:IncludingaRubyclassfromaseparatefile【发布时间】:2010-11-0606:00:28【问题描述】:有一段时间我一直在Ruby模块中包含整个类。显然这不是我应该做的。似乎模块的重点是存储函数,然后可... 查看详情

如何在 AWS 配置文件中包含山魈凭证?

】如何在AWS配置文件中包含山魈凭证?【英文标题】:howcanIincludemandrillcredentialsintheAWSconfigfile?【发布时间】:2015-03-1715:16:17【问题描述】:我正在使用sinatra在AWS上部署一个ruby​​应用程序。我想使用Mandrill发送电子邮件。我创... 查看详情

从 Ruby 中包含的文件中访问变量

...udedfilesinRuby【发布时间】:2011-02-2016:39:00【问题描述】:如何访问包含文件中定义的变量?#inc.rbfoo="bar";#main.rbrequire\'inc.rb\'putsfoo#NameError:undefinedlocalvariableormethod`foo\'formain:Obje 查看详情

在 YAML 变量中包含 jekyll / 液体模板数据?

...时间】:2013-01-0708:51:09【问题描述】:我正在使用Markdown文件的YAML标题将excerpt变量添加到我可以在其他地方使用的博客文章中。在其中一个摘录中,我通过markdown链接标记引用了之前的一篇博文,并且我使用流动模板数据变量sit... 查看详情

这里的这一属性如何在 ruby​​ 类中包含多个属性?

】这里的这一属性如何在ruby​​类中包含多个属性?【英文标题】:Howthisoneattributehereholdmultipleattributeinrubyclass?【发布时间】:2017-09-0202:07:55【问题描述】:如您所见,我们有一个名为“attributes”的属性,我们在类中对其进行... 查看详情

如何在 PHP 中包含名称存储在数组中的文件?

】如何在PHP中包含名称存储在数组中的文件?【英文标题】:HowtoincludefileswhichnamesarestoredinarrayinPHP?【发布时间】:2017-08-2707:27:32【问题描述】:我想稍微简化一下PHP中包括或需要处理的文件,所以我写了这个函数:$files=array("fil... 查看详情

如何在icarus verilog中包含文件?

】如何在icarusverilog中包含文件?【英文标题】:Howtoincludefilesinicarusverilog?【发布时间】:2017-11-2307:07:56【问题描述】:我知道基本的`include"filename.v"命令。但是,我正在尝试包含另一个文件夹中的模块。现在,该模块还包括存在... 查看详情

如何将存储在 HDFS 中包含行的文本文件转换为 Pyspark 中的数据框?

】如何将存储在HDFS中包含行的文本文件转换为Pyspark中的数据框?【英文标题】:HowcanIconvertatextfilestoredinHDFScontainingRowsintoaDataframeinPyspark?【发布时间】:2017-11-0712:40:37【问题描述】:我正在使用Pyspark,最近将数据帧作为文本文... 查看详情

需要 rspec 中包含 ruby​​ 文件的整个文件夹 [重复]

】需要rspec中包含ruby​​文件的整个文件夹[重复]【英文标题】:Requireentirefolderwithrubyfilesinrspec[duplicate]【发布时间】:2019-02-2519:01:51【问题描述】:我需要一个包含很多文件的文件夹:require\'./models/request_builders/ipg_request_builder.r... 查看详情

如何在 Visual Studio、C# 项目的部署中包含文件和文件夹?

】如何在VisualStudio、C#项目的部署中包含文件和文件夹?【英文标题】:Howtoincludefilesandfoldersinthedeploymentofavisualstudio,C#project?【发布时间】:2013-06-2515:38:13【问题描述】:我正在开发一个C#应用程序。在这个程序中,它会查看一个... 查看详情

为啥在 Ruby 中包含模块的顺序会有所不同?

】为啥在Ruby中包含模块的顺序会有所不同?【英文标题】:WhydoestheorderofincludingmodulesmakeadifferenceinRuby?为什么在Ruby中包含模块的顺序会有所不同?【发布时间】:2010-09-2502:45:46【问题描述】:这个问题最好用一个代码示例来概括... 查看详情

Ruby在模型中包含模块的单一方法

】Ruby在模型中包含模块的单一方法【英文标题】:Rubyincludemodule\'ssinglemethodinmodel【发布时间】:2011-09-2420:05:38【问题描述】:我有一个关注模块moduleSimpleTaskdeftask1enddeftask2enddeftask3endend我有一个模型,它只需要模块SimpleTask的task2... 查看详情

在 laravel 中包含 php 文件的位置以及如何使用 javascript 调用 php 文件中的特定函数

】在laravel中包含php文件的位置以及如何使用javascript调用php文件中的特定函数【英文标题】:Wheretoincludethephpfileinlaravelandhowtocallaspecificfunctioninthephpfileusingjavascript【发布时间】:2015-01-1916:29:08【问题描述】:我是Laravel的新手,正... 查看详情

如何在另一个 JavaScript 文件中包含一个 JavaScript 文件?

】如何在另一个JavaScript文件中包含一个JavaScript文件?【英文标题】:HowdoIincludeaJavaScriptfileinanotherJavaScriptfile?【发布时间】:2010-10-3107:24:12【问题描述】:JavaScript中是否有类似于CSS中的@import的东西允许您将JavaScript文件包含在另... 查看详情

如何使用正则表达式匹配 Ruby 中包含特殊字符的重复模式?

】如何使用正则表达式匹配Ruby中包含特殊字符的重复模式?【英文标题】:HowtomatchrepeatingpatternscontainingspecialcharactersinRubyusingregex?【发布时间】:2021-12-0622:36:43【问题描述】:基本上,我正在尝试使用正则表达式来匹配Ruby中包... 查看详情

如何在聚合物 3 中包含外部 html 文件和 js 文件?

】如何在聚合物3中包含外部html文件和js文件?【英文标题】:Howtoincludeexternalhtmlfileandjsfileinpolymer3?【发布时间】:2019-03-0807:05:18【问题描述】:我正在尝试将html部分与聚合物3.0中的.js分开。如何在.js中包含外部html文件?要么我... 查看详情