如何将自定义存储桶URL与aws-sdk一起使用

时间:2015-10-20 10:12:25

标签: ruby amazon-s3 aws-sdk

说我有一个S3存储桶:

media.coolstuff.com

我已经为域启用了静态网站托管,这就是AWS给我的URL:

media.coolstuff.com.s3-website-us-east-1.amazonaws.com

我已将子域名中的CNAME发送到AWS域名。在我的存储桶中,我添加了index.html并将其公开,并且访问media.coolstuff.com成功呈现了它,因此我知道重定向可以正常工作。

我试图弄清楚如何使用aws-sdk gem来使用存储桶中对象的子域返回URL。

以下是代码:

creds = Aws::Credentials.new(access_key, secret_access_key)
s3 = Aws::S3::Resource.new(
  credentials: creds,
  endpoint: 'http://media.coolstuff.com',
  region: 'us-east-1'
)
bucket = s3.bucket('media.coolstuff.com')
obj = bucket.object('index.html')

obj.public_url
=> "http://media.coolstuff.com.media.coolstuff.com/index.html"

如您所见,公共网址已重复存储桶。我明白这是为什么:存储桶名称以端点为前缀。但在这里,它不应该。我不知道怎么解决这个问题。

同样,试图让etag失败,因为它无法找到正确的URL:

obj.etag
Seahorse::Client::NetworkingError: unable to connect to `media.coolstuff.com.media.coolstuff.com`; SocketError: getaddrinfo: nodename nor servname provided, or not known

1 个答案:

答案 0 :(得分:2)

根据documentation,您可以使用

执行此操作
object.public_url(virtual_host: true)

请勿更改默认端点 - 这用于对S3的实际api调用