2015-01-16 16 views
2

當使用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 

現在,當我在 「發展」 的模式下運行,我想所有的設置與#{myVar}擴大,例如settings.kibana_url將變爲http://kibana.st.mydomain/kibana/#

達到此目的的最佳方法是什麼?如果可能的話,我可以通過settings變量中的值解決for循環。

(聲明:我是新來的Ruby,所以完整的例子將有很大的幫助。)

+0

不是問題的答案,但如果我想要這樣做,我不會使用擴展名。我有一個config.rb程序,把設置,並將其加載到我的config.ru與一個'require' ... –

回答

1

重命名logging.yamllogging.yaml.erb和使用<%= settings.myVar %>代替#{myVar}。瞧!

這是因爲Sinatra :: ConfigFile支持Yaml和ERB文件作爲輸入。

+2

注意事項 - 這不會工作,如果您使用模塊化風格Sinatra應用程序,因爲它依賴於Erb被評估爲與調用它的代碼相同的綁定,因此'settings'可用。這恰好適用於經典風格的應用程序,因爲在這種情況下'settings'被添加到頂層,默認情況下是使用Erb中的頂層綁定。在這種情況下,你可以使用'MyAppname.settings'。 (對於ConfigFile來說,它看起來像是一個相當簡單的修復)。 – matt