我使用最新版本的refile gem将图像上传到AWS,它运行良好。当我尝试用rspec测试我的应用程序时,我得到了这个错误:
/aws-sdk-core/plugins/regional_endpoint.rb:34:在`after_initialize'中:缺少区域;使用:区域选项或将区域名称导出到ENV[AWS_region'](AWS::Errors::MissingRegionError)
Gemfile:
gem"refile",要求:"refile/rails"
gem"refile-mini_magick"
gem"refile-s3"
重新文件.rb
需要"refile/simple_form"
需要"重新提交/s3"
aws={
access_key_id:ENV[AWS_access_key_id'],
secret_access_key:ENV[AWS_secret_access_key'],
区域:ENV[AWS_region'],
铲斗:ENV[AWS_bucket']
}
Refile.cache=Refile::S3.new(前缀:"cache",**aws)
Refile.store=Refile::S3.new(前缀:"store",**aws)
我尝试设置一个新的初始值设定项aws.rb:
需要"aws-sdk"
Aws.config.update({区域:'us-west-2',credentials:Aws::credentials.new('kid','secret')})
但它没有起作用。
10x感谢您的帮助
找到了答案:只需添加到初始化程序/refile.rb:
require "refile/s3"
require 'refile/simple_form'
if Rails.env.production?
aws = {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
region: ENV['AWS_REGION'],
bucket: ENV['AWS_BUCKET']
}
Refile.cache = Refile::S3.new(prefix: "cache", **aws)
Refile.store = Refile::S3.new(prefix: "store", **aws)
end
看起来您的代码正在寻找AWS_REGION值作为环境变量。在运行测试之前,您是否验证了AWS_REGION的值是在您的环境中设置的?您可以通过以下操作查看它是否设置在bash中:
env | grep AWS_REGION
如果没有设置,那么只需要像这样设置变量(同样在bash中):
export AWS_REGION="us-west-2"