web-dev-qa-db-ja.com

rails 3、Settings.ymlファイルでENV config varsを使用する方法は?

私の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???)
47
jpwynn

以下を使用してください:-

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

上記の解決策は私にはうまくいきませんでした。ただし、 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をロードします。

27
arpiagar

使用する <%= ENV['FOOVAR'] %> の代わりに <% ENV['FOOVAR'] %>

このアプローチは、Yamlファイルを解析するものがErbを介して処理するように設定されている場合にのみ機能することに注意してください(たとえば、 Mongoidが正確にこれを行う方法 )。ただし、Yamlファイルでは普遍的にサポートされていないため、このYamlファイルの使用目的に依存します。

24