Ответ 1
используйте следующее: -
default:
cv1: Foo
cv2: <%= ENV['FOOVAR'] %>
В моем файле 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???)
используйте следующее: -
default:
cv1: Foo
cv2: <%= ENV['FOOVAR'] %>
Используйте <%= ENV['FOOVAR'] %>
вместо <% ENV['FOOVAR'] %>
.
Имейте в виду, что этот подход будет работать только в том случае, если все, что анализирует файл Ямля, настроено для обработки его через Erb (например, вы можете видеть как Mongoid делает именно это). Он не поддерживается повсеместно в файлах Yaml, поэтому, это зависит от того, для чего вы используете этот файл Yaml.
Вышеупомянутое решение не сработало для меня. Однако я нашел решение на Как использовать переменные в файле 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, как показано выше.