私のsettings.ymlファイルにはいくつかの設定変数があり、そのいくつかはENV []変数を参照しています。
たとえば、ENV ['FOOVAR']がWIDGETと等しい
次のように<%%>内のENV変数を参照できると思いました。
Settings.yml:
default:
cv1: Foo
cv2: <% ENV['FOOVAR'] %>
in Rails consoleと入力すると
> ENV['FOOVAR']
=> WIDGET
だが
> Settings.cv1
=> Foo (works okay)
> Settings.cv2
=>nil (doesn't work???)
以下を使用してください:-
default:
cv1: Foo
cv2: <%= ENV['FOOVAR'] %>
上記の解決策は私にはうまくいきませんでした。ただし、 YAMLファイルで変数を使用するにはどうすればよいですか? で解決策が見つかりました
私の.ymlファイルには次のようなものが含まれていました。
development:
gmail_username: <%= ENV["GMAIL_USERNAME"] %>
gmail_password: <%= ENV["GMAIL_PASSWORD"] %>
ソリューションは次のようになります。
template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)
したがって、.ymlファイルにスクリプトレットタグを導入すると、それはerbテンプレートになります。したがって、最初にerbテンプレートとして読み取り、次に上記のようにymlをロードします。
使用する <%= ENV['FOOVAR'] %>
の代わりに <% ENV['FOOVAR'] %>
。
このアプローチは、Yamlファイルを解析するものがErbを介して処理するように設定されている場合にのみ機能することに注意してください(たとえば、 Mongoidが正確にこれを行う方法 )。ただし、Yamlファイルでは普遍的にサポートされていないため、このYamlファイルの使用目的に依存します。