如何在 Ruby 中的 YAML 文件中包含 YAML 文件
YAML 中是否有自定义标签供 ruby 在 YAML 文件中包含 YAML 文件?
#E.g.:
--- !include
filename: another.yml
前段时间有人提出了类似问题没有相关答案。
我想知道 Ruby 是否有一些类似于 Python 的 this 的自定义标签。
Is there a custom tag in YAML for ruby to include a YAML file inside a YAML file?
#E.g.:
--- !include
filename: another.yml
A similar question was asked some time ago and there was no relevant answer.
I am wondering if there is some custom tag for Ruby similar to this one for Python.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果您使用 Rails,YAML 可以包含 ERB。
将它们组合在一起,以下是如何使用
<%= %>
包含另一个文件中的一个文件:database.yml
database.sqlite.yml
database.mysql.yml
If you are in Rails, YAML can include ERB.
Combine that together, and here is how you can use
<%= %>
to include one file from another:database.yml
database.sqlite.yml
database.mysql.yml
我找到了一种使用 ERB 来解决我的情况的方法。
我猴子修补了 YAML 模块以添加两个新方法,
我有三个 YAML 文件。
mod1_config.yml
mod2_config.yml
all_config.yml
使用方法
YAML::load_erb
解析 yaml 文件,而不是方法YAML::load
。注意事项:
I found a way to address my scenario using ERB.
I monkey patched YAML module to add two new methods
I have three YAML files.
mod1_config.yml
mod2_config.yml
all_config.yml
Parse the yaml file using the method
YAML::load_erb
instead of the methodYAML::load
.Caveats:
如果您的目标是避免 YAML 文件中的重复(不一定包括外部文件),我建议您执行以下操作:
If your aim is avoiding duplication in your YAML file, not necessarily including external file, I recommend doing something like this:
如果您只想从另一个 YAML 文件继承,可以通过扩展 ruby YAML 库来提供您所要求的此功能:
https://github.com/entwanderer/yaml_extend
https://rubygems.org/ gems/yaml_extend
用法
yaml_extend 将方法 YAML#ext_load_file 添加到 YAML。
此方法的工作方式类似于原始 YAML#load_file,通过文件继承对其进行扩展。
示例
-
基本继承
导致
If you just want to inherit from another YAML file, there is a gem providing this functionality you are asking for by extending the ruby YAML library:
https://github.com/entwanderer/yaml_extend
https://rubygems.org/gems/yaml_extend
Usage
yaml_extend adds the method YAML#ext_load_file to YAML.
This method works like the original YAML#load_file, by extending it with file inheritance.
Examples
-
Basic Inheritance
results in
我正在使用这个:
load_config.rb(初始化程序)
稍后,您可以通过执行以下操作来访问配置值:
I'm using this:
load_config.rb (initializer)
Later, you can access config values by doing:
!include
不是指令而是标签。它不是 Python(或 PyYAML)的功能,而是“poze”库的功能:
poze.configuration 公开了一个名为 include 的默认指令。
YAML 规范没有定义这样的标准标签。
!include
is not a directive but a tag.it is not a feature of Python (or PyYAML) but a feature of the "poze" library:
poze.configuration exposes a default directive named include.
YAML specification does not define such a standard tag.
取决于你需要它做什么。如果需要传输文件,可以对内部yaml文件进行base64编码。
Depends what you need it for. If you need to transport file, you can base64 encode internal yaml file.