我已经挣扎了一段时间试图配置回形针上传文件到我的S3帐户。
当我试图上传一个文件时,会提示以下错误。
结构中没有成员“桶” 无效配置选项:桶
通过我自己的研究和深入研究aws,我发现aws与一个插件列表一起工作,每个插件都将一组特定的可配置字段添加到一个结构中,这个结构作为一个检查列表工作,如果对象试图添加一个不存在的选项,它会引发一个异常。由于某种原因,":bucket“属性没有添加到该结构中。
我在rails 5.1.2中使用aws (2.6.50)和回形针(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 (2.6.50) lib/海马/客户机/配置.lib
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我已经检查了桶名是否正确设置,而且它是正确的。
我很感谢你事先的帮助。
谢谢!
发布于 2018-03-01 12:25:23
我发现了这个问题,我正在初始化Aws配置哈希(因为我对API有其他用途),初始化Aws配置哈希(因为我对API有其他用途),而且似乎它不太喜欢它。我将桶名移到papeclip对象中,它就成功了!就像这样。
config.paperclip_defaults = {
storage: :s3,
s3_region: ENV['S3_REGION'],
bucket: ENV['S3_BUCKET_NAME']
}看看文档中的配置选项,它说:
可以通过Aws.config配置默认凭据和区域。在第2版中,Aws.config是一个普通的Ruby,而不是版本1中的方法,Aws.config哈希优先于环境变量。 要求‘aws’ Aws.config.update({ region:'us-west-2',凭据: Aws::Credentials.new('akid',‘保密’) })
这是基本的配置,您可以在这里查找其他选项
这里我可以给出一个小小的建议,就是要小心使用哪个版本的SDK来读取正确的文档。就在不久之前,第3版出现了,并且在我所寻找的主题上有一个混合的结果。
https://stackoverflow.com/questions/49047656
复制相似问题