为了避免在 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\"] %>"}
不是应该已经加载环境密钥了吗?这可能是我的问题吗?