为了避免在yml文件上传递访问密钥和秘密法律访问,我使用以下命令:
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"] %>"}
不是应该已经加载环境密钥了吗?这是我的问题吗?
当我从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'])
我猜有时候在粘贴代码行之前,人们只需要了解自己在做什么…