Rails 5 читает переменные окружения в виде строки в файле YAML - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть приложение на Rails 5, и я пытаюсь импортировать переменные среды в файл yaml, который затем можно импортировать в environment.rb.Мой config/aws.yml выглядит следующим образом:

S3_BUCKET: <%= ENV["S3_BUCKET"] %>
AWS_ACCESS_KEY_ID: <%= ENV["AWS_ACCESS_KEY_ID"] %>
AWS_SECRET_ACCESS_KEY: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>

Тогда в моем environment.rb у меня есть следующее:

require_relative 'application'
aws_file = File.join(Rails.root, 'config', 'aws.yml')
if File.exist?(aws_file)
  YAML.safe_load(File.open(aws_file)).each do |k, v|
    ENV[k.to_s] = v
  end
end

при запуске моего rails c вот что я получаю:

[1] pry(main)> ENV.fetch('S3_BUCKET')
=> "<%= ENV[\"S3_BUCKET\"] %>" 

Как передать фактическую переменную среды, а не вытягивать имя переменной среды в виде строки?

РЕДАКТИРОВАТЬ: Добавление более актуальной информации

Мои учетные данныехранятся в моей elastic-beanstalk конфигурации, и я пытаюсь загрузить значения из конфигурации в мой yaml файл.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы пробовали fetch, на моем случае это сработало:

S3_BUCKET: <%= ENV.fetch("S3_BUCKET") %>
AWS_ACCESS_KEY_ID: <%= ENV.fetch("AWS_ACCESS_KEY_ID") %>
AWS_SECRET_ACCESS_KEY: <%= ENV.fetch("AWS_SECRET_ACCESS_KEY") %>
0 голосов
/ 12 февраля 2019

<%= ... %> является функцией ERB, а не YAML.Сначала нужно запустить YAML-файл через ERB, чтобы <%= ... %> запустился, а затем загрузить его как YAML.

Но есть более глубокая проблема.Ваш файл YAML пытается получить свои значения из переменных среды.Но затем вы устанавливаете те же переменные окружения из значений YAML.Он круглый.

Вместо этого используйте что-то вроде Зашифрованные учетные данные , представленные в Rails 5.2, для управления своими секретами.Затем напишите config/initializer/aws.rb, чтобы установить необходимые переменные окружения из этих секретов.Это хорошо, потому что он хранит ваши секреты в вашем приложении, а не в платформе развертывания.Затем его можно запустить с полными секретами где угодно.

Или вы можете установить переменные среды в Elastic Beanstalk через консоль «Свойства среды».

...