Sinatra::ConfigFile 中的动态属性

Dynamic properties in Sinatra::ConfigFile

使用 Sinatra::ConfigFile 生成设置时是否可以扩展动态属性?

说我有这个 logging.yaml:

elasticsearch_url:
  development: "http://kibana.#{myVar}.mydomain/elasticsearch/"
  production:  "http://kibana.mydomain/elasticsearch/"

kibana_url:
  development: "http://kibana.#{myVar}.mydomain/kibana/#"
  production:  "http://kibana.mydomain/kibana/#"

这是一个假人 config.ru:

require 'sinatra/config_file'

configure do      
  set :default_dashboard, 'mydashboard'
  set :myVar, 'st'
  config_file 'instances.yaml', 'logging.yaml'
end

现在,当我在 "development" 模式下 运行 时,我希望扩展所有带有 #{myVar} 的设置,例如settings.kibana_url 会变成 http://kibana.st.mydomain/kibana/#.

实现此目标的最佳方法是什么?如果可能的话,我可以通过 settings 变量中的值进行 for 循环。

(免责声明:我是 Ruby 的新手,所以完整的示例会有很大帮助。)

logging.yaml 重命名为 logging.yaml.erb 并使用 <%= settings.myVar %> 而不是 #{myVar}。瞧!

这是因为Sinatra::ConfigFile同时支持 Yaml 和 ERB 文件作为输入。