Rails 5在YAML文件中以字符串形式读取环境变量

anonn023432

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

<%= ... %>是ERB的功能,而不是YAML。您需要先通过ERB运行YAML文件,以<%= ... %>使其执行,然后将其加载为YAML。

但是还有一个更深层次的问题。您的YAML文件正在尝试从环境变量获取其值。但是,然后您可以从YAML值中设置那些相同的环境变量。它是圆形的。

而是使用Rails 5.2中引入的加密凭据之类的东西来管理您的机密。然后编写config/initializer/aws.rb以根据这些机密设置必要的环境变量。很好,因为它可以将您的机密存储在应用程序中,而不是存储在部署平台中。然后就可以在任何地方使用完整机密来运行它。

或者,您可以通过“环境属性”控制台在Elastic Beanstalk中设置环境变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章