关键词:
【中文标题】如何在 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。
将它们组合在一起,您可以使用<%= %>
包含另一个文件:
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文件?要么我... 查看详情