【问题标题】:Rails4.1: AWS errors missing regionRails4.1:AWS 错误缺少区域
【发布时间】:2015-11-20 09:31:22
【问题描述】:

我正在尝试使用回形针、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 控制台中

2.0.0p247 :001 > ENV["AWS_REGION"]

=> "us-west-2" 2.0.0p247:002 >

【问题讨论】:

  • AWS_REGION 附近的引号乱了。
  • 那个访问密钥看起来很可疑:P

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


【解决方案1】:

错误源自 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']
  }
}

【讨论】:

  • 我这样做了,但没有奏效。它是否需要是“AWS_REGION”,我不能简单地在我的秘密或 figaro .yml 文件中以不同的方式调用它吗?
【解决方案2】:

.env 文件中存在语法错误,这很可能是导致此错误的原因。

变化:

export AWS_REGION="'us-west-2'

到:

export AWS_REGION='us-west-2'

重新加载外壳并重试。

更新

确保您的 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']
        }
    }

【讨论】:

  • 您实际上还有一个错字:region: "ENV['AWS_REGION"], 修复它并重试。
  • 感谢您的帮助,但使用 'us-west-2' 的 oregan 时遇到了同样的错误
  • 如果您在s3_credentials 键中取出region: ENV['AWS_REGION'] 会发生什么?
猜你喜欢
  • 2018-04-11
  • 2021-07-26
  • 2021-01-02
  • 2018-03-02
  • 2015-11-05
  • 2016-12-01
  • 2017-11-20
  • 2022-09-30
  • 2016-12-23
相关资源
最近更新 更多