0

为了避免在 yml 文件上传递访问密钥和秘密 aws 访问权限,我使用以下内容:

development:
  bucket: development
  access_key_id: <%= ENV["S3_KEY"] %>
  secret_access_key: <%= ENV["S3_SECRET"] %>

然后在运行时出现错误

Could not log "sql.active_record" event. ArgumentError: invalid byte sequence in UTF-8
PG::Error: ERROR:  invalid byte sequence for encoding "UTF8": 0xe7 0xe3 0x6f

如果我直接在 yml 上写我的访问密钥和秘密,例如:

development:
  bucket: development
  access_key_id: MYACCESSKEY
  secret_access_key: MYSECRETKEY

它进展顺利。

为什么会发生此错误?如何在不将我的密钥和秘密加载到 yml 文件的情况下修复它?

编辑

要将环境变量加载到开发中,我使用的是此处解释的解决方案

# Load the app's custom environment variables here, so that they are loaded before environments/*.rb
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
load(app_environment_variables) if File.exists?(app_environment_variables)

这可能是加载过程的问题吗?

编辑 2

同时,我尝试记录似乎在我的 S3_CONFIG 变量上的内容,其中加载了:

配置/初始化程序/load_config.rb

S3_CONFIG = YAML.load_file("#{::Rails.root}/config/s3.yml")[Rails.env]

我明白了

S3 Config: {"bucket"=>"mybucket", "access_key_id"=>"<%= ENV[\"S3_KEY\"] %>", "secret_access_key"=>"<%= ENV[\"S3_SECRET\"] %>"}

不是应该已经加载环境密钥了吗?这可能是我的问题吗?

4

1 回答 1

0

当我从 S3 下载文件时发生了这个问题:

s3=AWS::S3.new(
      access_key_id: S3_CONFIG["access_key_id"],
      secret_access_key: S3_CONFIG["secret_access_key"])

并且S3_CONFIG["access_key_id"]只是一个字符串<%= ENV[\"S3_KEY\"] %>

我对此的解决方案是使用

s3=AWS::S3.new(
      access_key_id: ENV['S3_KEY'],
      secret_access_key: ENV['S3_SECRET'])

猜猜有时一个人只需要了解他在做什么,然后再粘贴几行代码......

于 2013-03-17T18:15:35.087 回答