Rails4.1:AWS错误缺失区域

时间:2015-08-26 11:06:56

标签: ruby-on-rails ruby amazon-web-services amazon-s3

我正在尝试使用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;

2 个答案:

答案 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并重试。

Upate

确保您的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']
        }
    }
相关问题