无法使用回形针导轨上传到S3 5.配置选项无效:存储桶

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用回形针导轨上传到S3 5.配置选项无效:存储桶相关的知识,希望对你有一定的参考价值。

我一直在努力尝试配置回形针以将文件上传到我的S3帐户。

当我尝试上传文件时,会出现以下错误提示。

struct中没有成员'bucket'

配置选项无效:存储桶

做我自己的研究并深入研究aws-sdk,我发现aws-sdk使用插件列表,每个插件都将一组特定的可配置字段添加到结构中,这个结构作为一个检查列表和如果对象尝试添加不存在的选项,则会引发异常。由于某种原因,“:bucket”属性未添加到该结构中。

我在rails 5.1.2中使用了aws-sdk(2.6.50)和paperclip(5.2.1)

我在application.rb中的配置设置是

config.paperclip_defaults = {
  storage: :s3,
  s3_credentials: {
    bucket: ENV['S3_BUCKET_NAME'],
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
    s3_region: ENV['S3_REGION'],
    s3_host_name: ENV['S3_HOST_NAME']
  }
}

这是回溯的一部分。

block in Seahorse::Client::Configuration#apply_options
aws-sdk-core (2.6.50) lib/seahorse/client/configuration.rb, line 163
Seahorse::Client::Configuration#apply_options
aws-sdk-core (2.6.50) lib/seahorse/client/configuration.rb, line 161
Seahorse::Client::Configuration#build!
aws-sdk-core (2.6.50) lib/seahorse/client/configuration.rb, line 149
Aws::S3::Client#build_config
aws-sdk-core (2.6.50) lib/seahorse/client/base.rb, line 68
Aws::S3::Client#initialize
aws-sdk-core (2.6.50) lib/seahorse/client/base.rb, line 19
Aws::S3::Client.new
aws-sdk-core (2.6.50) lib/seahorse/client/base.rb, line 105
Aws::S3::Resource#extract_client
aws-sdk-resources (2.6.50) lib/aws-sdk-resources/resource.rb, line 169
Aws::S3::Resource#initialize
aws-sdk-resources (2.6.50) lib/aws-sdk-resources/resource.rb, line 15
Paperclip::Attachment#obtain_s3_instance_for
paperclip (5.2.1) lib/paperclip/storage/s3.rb, line 269
Paperclip::Attachment#s3_interface
paperclip (5.2.1) lib/paperclip/storage/s3.rb, line 263
Paperclip::Attachment#s3_bucket
paperclip (5.2.1) lib/paperclip/storage/s3.rb, line 273
Paperclip::Attachment#s3_object
paperclip (5.2.1) lib/paperclip/storage/s3.rb, line 281
Paperclip::Attachment#exists?
paperclip (5.2.1) lib/paperclip/storage/s3.rb, line 326
block in Paperclip::Attachment#queue_all_for_delete
paperclip (5.2.1) lib/paperclip/attachment.rb, line 569
Paperclip::Attachment#queue_all_for_delete
paperclip (5.2.1) lib/paperclip/attachment.rb, line 568
Paperclip::Attachment#clear
paperclip (5.2.1) lib/paperclip/attachment.rb, line 259
Paperclip::Attachment#assign
paperclip (5.2.1) lib/paperclip/attachment.rb, line 107

这是失败的方法。

aws-sdk-core(2.6.50)lib / seahorse / client / configuration.rb

  def apply_options(struct, options)
    options.each do |opt, value|
      begin
        struct[opt] = value
      rescue NameError
        msg = "invalid configuration option `#{opt.inspect}'"
        raise ArgumentError, msg
      end
    end

我检查了桶名称是否设置正确,确实如此。

我事先感谢你的帮助。

谢谢!

答案

我发现了这个问题,我正在初始化Aws配置哈希(在paperclip配置对象之外,因为我有其他用途的API),里面有桶名,似乎它不太喜欢它。我将存储桶名称移动到papeclip默认对象中,它工作正常!这样的事情。

config.paperclip_defaults = {
  storage: :s3,
  s3_region: ENV['S3_REGION'],
  bucket: ENV['S3_BUCKET_NAME']
}

查看文档中的配置选项,它说:

您可以通过Aws.config配置默认凭据和区域。在版本2中,Aws.config是一个vanilla Ruby散列,而不是像版本1中那样的方法.Aws.config散列优先于环境变量。

要求'aws-sdk'

Aws.config.update({region:'us-west-2',凭据:Aws :: Credentials.new('akid','secret')})

这是基本配置,您可以在此处查找其他选项

https://docs.aws.amazon.com/sdkforruby/api/#Configuration_Options

我在这里给出的一个小建议是要小心使用哪个版本的SDK来阅读正确的文档。不久前版本3出现了,我正在寻找的主题结果有所不同。

以上是关于无法使用回形针导轨上传到S3 5.配置选项无效:存储桶的主要内容,如果未能解决你的问题,请参考以下文章

Rails:回形针上传时 AWS S3 访问被拒绝错误

在 S3 存储上使用回形针下载和上传的不同 URL

回形针在使用 S3 时在本地查找文件以进行重新处理

上传图片 - Nodejs Paperclip 和 S3

我应该如何在 Amazon S3 上配置“阻止公共访问”?

如何解决 AWS::S3::Errors:: 拒绝访问?