Har*_*tty 17 ruby yaml ruby-on-rails
在YAML中是否有自定义标记,以便在YAML文件中包含YAML文件?
#E.g.:
--- !include
filename: another.yml
Run Code Online (Sandbox Code Playgroud)
前一段时间问了一个类似的问题,没有相关的答案.
我想知道是否有是Ruby一些自定义标签类似这样一个为Python.
小智 17
如果你在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 %>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
database.mysql.yml
development:
adapter: mysql2
# ... the rest of your mysql configuration ...
Run Code Online (Sandbox Code Playgroud)
Har*_*tty 14
我找到了一种使用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
Run Code Online (Sandbox Code Playgroud)
我有三个YAML文件.
mod1_config.yml
mod1:
age: 30
city: San Francisco
Run Code Online (Sandbox Code Playgroud)
mod2_config.yml
mod2:
menu: menu1
window: window1
Run Code Online (Sandbox Code Playgroud)
all_config.yml
<%= YAML::include("mod1_config.yml") %>
<%= YAML::include("mod2_config.yml") %>
Run Code Online (Sandbox Code Playgroud)
使用方法YAML::load_erb而不是方法解析yaml文件YAML::load.
config = YAML::load_erb('all_config.yml')
config['mod1']['age'] # 30
config['mod2']['menu'] # menu1
Run Code Online (Sandbox Code Playgroud)
注意事项:
如果你的目标是避免在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15026 次 |
| 最近记录: |