rails 3, как использовать конфигурационные переменные ENV в файле Settings.yml? - PullRequest
46 голосов
/ 03 мая 2011

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

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

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

Settings.yml:

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

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

> ENV['FOOVAR']
=> WIDGET

, но

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

Ответы [ 3 ]

65 голосов
/ 03 мая 2011

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

 default:
       cv1: Foo
       cv2: <%= ENV['FOOVAR'] %>
26 голосов
/ 16 сентября 2014

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

24 голосов
/ 03 мая 2011

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

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

...