rails 3,如何在Settings.yml文件中使用ENVconfigurationvariables?

在我的settings.yml文件中,我有几个configurationvariables,其中一些引用ENV []variables。

例如我有ENV ['FOOVAR']等于WIDGET

我以为我可以像这样在<%%>里面引用ENVvariables:

settings.yml中:

default: cv1: Foo cv2: <% ENV['FOOVAR'] %> 

在轨道控制台,如果我input

 > ENV['FOOVAR'] => WIDGET 

 > Settings.cv1 => Foo (works okay) > Settings.cv2 =>nil (doesn't work???) 

使用以下内容: –

  default: cv1: Foo cv2: <%= ENV['FOOVAR'] %> 

使用<%= ENV['FOOVAR'] %>而不是<% ENV['FOOVAR'] %>

请注意,这种方法只有在parsingYaml文件的时候才能通过Erb来处理(例如,你可以看到Mongoid如何做到这一点 )。 Yaml文件并没有普遍支持,所以这取决于你使用这个Yaml文件。

上述解决scheme不适合我。 但是,我发现解决scheme如何在YAML文件中使用variables?

我的.yml文件包含像这样的东西:

 development: gmail_username: <%= ENV["GMAIL_USERNAME"] %> gmail_password: <%= ENV["GMAIL_PASSWORD"] %> 

解决scheme如下所示:

 template = ERB.new File.new("path/to/config.yml.erb").read processed = YAML.load template.result(binding) 

所以当你在.yml文件中引入scriptlet标签时,它更多的是erb模板。 所以首先阅读它作为一个erb模板,然后加载如上所示的yml。