48

私の settings.yml ファイルには、いくつかの構成変数があり、そのうちのいくつかは ENV[] 変数を参照しています。

たとえば、私は ENV['FOOVAR'] が WIDGET に等しい

次のように <% %> 内で ENV vars を参照できると思いました:

設定.yml:

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

入力するとレールコンソールに

> ENV['FOOVAR']
=> WIDGET

しかし

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

4 に答える 4

68

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

 default:
       cv1: Foo
       cv2: <%= ENV['FOOVAR'] %>
于 2011-05-03T07:10:58.043 に答える
31

上記の解決策は私にはうまくいきませんでした。ただし、 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 ファイルに scriptlet タグを導入すると、より erb テンプレートになります。そのため、最初に erb テンプレートとして読み込んでから、上記のように yml をロードします。

于 2014-09-16T06:42:42.160 に答える
24

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

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

于 2011-05-03T07:11:28.240 に答える