Подтвердить что ты не робот

Rails 3, как использовать конфигурационные файлы ENV в файле Settings.yml?

В моем файле settings.yml у меня есть несколько конфигурационных vars, некоторые из которых ссылаются на переменные ENV [].

например, у меня ENV ['FOOVAR'] равно WIDGET

Я думал, что могу ссылаться на ENV vars внутри <%% > следующим образом:

settings.yml:

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

в консоли rails, если я набираю

> ENV['FOOVAR']
=> WIDGET

но

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

Ответ 1

используйте следующее: -

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

Ответ 2

Используйте <%= ENV['FOOVAR'] %> вместо <% ENV['FOOVAR'] %>.

Имейте в виду, что этот подход будет работать только в том случае, если все, что анализирует файл Ямля, настроено для обработки его через Erb (например, вы можете видеть как Mongoid делает именно это). Он не поддерживается повсеместно в файлах Yaml, поэтому, это зависит от того, для чего вы используете этот файл Yaml.

Ответ 3

Вышеупомянутое решение не сработало для меня. Однако я нашел решение на Как использовать переменные в файле 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)

Итак, когда вы вводите тег scriptlet в .yml файле, это скорее шаблон erb. Поэтому сначала прочитайте его как шаблон erb, а затем загрузите yml, как показано выше.