jpw*_*ynn 47 yaml env ruby-on-rails
在我的settings.yml文件中,我有几个配置变量,其中一些参考ENV []变量.
例如,我有ENV ['FOOVAR']等于WIDGET
我以为我可以在<%%>里面引用ENV变量,如下所示:
settings.yml中:
default:
cv1: Foo
cv2: <% ENV['FOOVAR'] %>
Run Code Online (Sandbox Code Playgroud)
在rails控制台中,如果我输入
> ENV['FOOVAR']
=> WIDGET
Run Code Online (Sandbox Code Playgroud)
但
> Settings.cv1
=> Foo (works okay)
> Settings.cv2
=>nil (doesn't work???)
Run Code Online (Sandbox Code Playgroud)
Anu*_*haw 66
使用以下: -
default:
cv1: Foo
cv2: <%= ENV['FOOVAR'] %>
Run Code Online (Sandbox Code Playgroud)
小智 27
上述解决方案对我不起作用.但是,我找到了如何在YAML文件中使用变量的解决方案 ?
我的.yml文件包含如下内容:
development:
gmail_username: <%= ENV["GMAIL_USERNAME"] %>
gmail_password: <%= ENV["GMAIL_PASSWORD"] %>
Run Code Online (Sandbox Code Playgroud)
解决方案如下:
template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)
Run Code Online (Sandbox Code Playgroud)
因此,当您在.yml文件中引入scriptlet标记时,它更像是erb模板.因此,首先将其作为erb模板阅读,然后如上所示加载yml.
Pre*_*ids 24
用<%= ENV['FOOVAR'] %>而不是<% ENV['FOOVAR'] %>.
请注意,只有在解析Yaml文件的任何设置通过Erb处理它时,此方法才有效(例如,您可以看到Mongoid如何做到这一点).它在Yaml文件中并不普遍支持,因此它取决于您使用此Yaml文件的内容.
| 归档时间: |
|
| 查看次数: |
41003 次 |
| 最近记录: |