如何在自定义域s3存储桶中使用ruby-aws-sdk#url_for?

时间:2014-06-18 20:30:06

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

我有一个工作桶,在s3上分配了一个子域,我想使用带有expire选项的对象的url_for方法为资源创建一个签名的URL。

在初始化程序中,我有:

AWS.config({
  :access_key_id => Rails.application.secrets.aws_access_key_id,
  :secret_access_key => Rails.application.secrets.aws_secret_access_key,
  :s3_endpoint => "assets.mydomain.com"
})

当我跑步时

AWS::S3.new.buckets["assets.mydomain.com"].objects["image.jpg"].url_for(:get, { :expires => 20.hours.from_now }).to_s

我得到了

"https://assets.mydomain.com/assets.mydomain.com/image.jpg?WSAccessKeyId=xxx&Expires=xxx&Signature=xxx"

请注意两次存储桶网址。

我该怎么做才能正常工作?

PS:删除端点并使用普通的s3 url(http://s3-west-1.amazon...)按预期工作,但我想使用我的自定义dns条目。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用选项force_path_style: false来使用子域名样式。

AWS::S3.new.buckets["assets.mydomain.com"].objects["image.jpg"]
  .url_for(:get, {:expires => 20.hours.from_now, force_path_style: false }).to_s

来自http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method