我正在尝试使用paperclip,aws-sdk gem和Amazon S3创建图像上传器。 我收到这个错误:
Aws::Errors::MissingRegionError in ProjectsController#create.
Missing region; use :region option or export region name to ENV['AWS_REGION']. using Oregon region.
projects_controller.rb
def create
@project = current_user.projects.new(project_params)
@project.save
respond_with(@project)
end
application.rb文件
config.paperclip_defaults = {
storage: :s3,
s3_host_name: "s3-us-west-2.amazonaws.com",
s3_credentials: {
bucket: ENV['AWS_BUCKET'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
根据S3文档,我知道我需要更改为ENV ['AWS_REGION']
config.paperclip_defaults = {
storage: :s3,
region: "ENV['AWS_REGION"],
s3_credentials: {
bucket: ENV['AWS_BUCKET'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}
并将区域添加到我的.env文件
export AWS_BUCKET=realv1
export AWS_ACCESS_KEY_ID=<MY_ACCESS_KEY_ID_HERE>
export AWS_SECRET_ACCESS_KEY=<MY_ACCESS_KEY_HERE>
export AWS_REGION="'us-west-2'
我重新启动了服务器并重新测试但仍然遇到相同的错误。
更新
更新
在rails console中
2.0.0p247:001&gt; ENV [ “AWS_REGION”]
=&GT; “美西2” 2.0.0p247:002&gt;
答案 0 :(得分:16)
错误源自Paperclip gem。在config.paperclip_defaults
使用region
后,您应该使用s3_region
。这就是配置的外观:
config.paperclip_defaults = {
:storage => :s3,
:s3_region => ENV['AWS_REGION'],
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
答案 1 :(得分:0)
.env
文件中存在语法错误,最有可能导致此错误。
变化:
export AWS_REGION="'us-west-2'
为:
export AWS_REGION='us-west-2'
重新加载shell并重试。
确保您的ENV
哈希值具有正确的region
。您可以在控制台中键入:ENV | grep AWS
进行检查。
然后,将region: ENV['AWS_REGION']
添加到您的s3_credentials
:
config.paperclip_defaults = {
storage: :s3,
region: ENV['AWS_REGION'],
s3_credentials: {
bucket: ENV['AWS_BUCKET'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
}