【问题标题】:Ruby: Undefined method `bucket' for #<Aws::S3::Client>Ruby:#<Aws::S3::Client> 的未定义方法“bucket”
【发布时间】:2019-07-02 20:48:20
【问题描述】:

使用aws-sdk-s3 gem,我目前能够将项目上传到存储桶并创建签名 URL,并且正在尝试确定存储桶中是否存在对象。我看到的所有文档都说 client.bucket('bucketname') 应该工作,但在我的情况下它不是。我试过了:

client.bucket('bucketname')
client.bucket['bucketname']
client.buckets('bucketname')
client.buckets['bucketname']

但没有任何工作。这个使用head_object 的建议是可能的(https://github.com/cloudyr/aws.s3/issues/160),但我仍然很好奇为什么bucket 不起作用。

文档:
https://gist.github.com/hartfordfive/19097441d3803d9aa75ffe5ecf0696da
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/index.html#Resource_Interfaces

【问题讨论】:

  • 调用client.bucket时是否出现未定义方法错误?可能是客户端定义不正确。如果你用的是pry,可以试试ls client看看有哪些方法可用。

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


【解决方案1】:

您应该在 Aws::S3::Resource 实例上而不是在 Aws::S3::Client 实例上调用 bucketbuckets 作为错误状态。

您提供的链接以及docs 表明:

s3 = Aws::S3::Resource.new(
  region: 'us-east-1',
  credentials: Aws::InstanceProfileCredentials.new()
)
bucket =  s3.bucket('my-daily-backups')

【讨论】:

  • Doh。漫漫长夜,早该回到这个。我可以发誓我遇到的一两个例子直接使用了Client。我仍然找不到使用带有凭据的InstanceProfileCredentials 的任何示例,并且没有采用明显的 id/key 参数。必须使用Resource.new(client: &lt;client&gt;)。谢谢。
猜你喜欢
  • 2019-12-25
  • 2010-10-15
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
相关资源
最近更新 更多