导轨5读取环境变量在YAML文件字符串

问题描述 投票:1回答:1

我有一个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文件。

ruby-on-rails environment-variables ruby-on-rails-5 amazon-elastic-beanstalk
1个回答
2
投票

<%= ... %>是ERB,不是YAML的一个特征。你需要先运行通过再培训局的YAML文件,以使<%= ... %>执行,然后加载它作为YAML。

但有一个更深层次的问题。你的YAML文件试图从环境变量得到其值。但你设置从YAML值的那些相同的环境变量。它是圆形的。

相反,使用类似Rails中引入5.2来管理你的秘密Encrypted Credentials。然后写config/initializer/aws.rb从这些秘密设置必要的环境变量。这是不错的,因为它存储了你的秘密,你的应用程序,而不是在部署平台。然后,它可以用充满秘密的任何地方运行。

或者你也可以通过“环境属性”控制台设置弹性魔豆的环境变量。


0
投票

你试过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") %>
© www.soinside.com 2019 - 2024. All rights reserved.