Amazon S3:如何在 ruby aws sdk 中设置使用虚拟主机的请求
Amazon S3: how to set requests to use virtual host in ruby aws sdk
目前,我正在使用 aws-sdk ruby 向 S3 发送 GET 请求,如下所示:
#!/usr/bin/ruby
#
require 'aws-sdk'
s3 = Aws::S3::Resource.new(region: 'test', endpoint:'http://10.0.23.45:8081')
my_bucket = s3.bucket('test.bucket-name')
my_bucket.objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
但请求正试图访问此 url 端点(虚拟主机):
http://test.bucket-name.10.0.23.45:8081
我想改用路径样式寻址。这就是我希望请求 url 端点的样子:
http://10.0.23.45:8081/test.bucket-name/
知道如何设置路径样式寻址而不是虚拟主机地址吗?谢谢
您需要根据documentation将选项:virtual_host
设置为true
。
所以在你的情况下,这样的事情应该有效:
s3.bucket('10.0.23.45:8081').object('test.bucket-name').public_url(virtual_host: true)
#=> "http://10.0.23.45:8081/test.bucket-name/"
我在查看 ruby aws-sdk Source Code
的源代码后找到了自己问题的答案
Aws.config[:s3] = { force_path_style: true }
添加以上行强制使用路径样式寻址。
目前,我正在使用 aws-sdk ruby 向 S3 发送 GET 请求,如下所示:
#!/usr/bin/ruby
#
require 'aws-sdk'
s3 = Aws::S3::Resource.new(region: 'test', endpoint:'http://10.0.23.45:8081')
my_bucket = s3.bucket('test.bucket-name')
my_bucket.objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
但请求正试图访问此 url 端点(虚拟主机):
http://test.bucket-name.10.0.23.45:8081
我想改用路径样式寻址。这就是我希望请求 url 端点的样子:
http://10.0.23.45:8081/test.bucket-name/
知道如何设置路径样式寻址而不是虚拟主机地址吗?谢谢
您需要根据documentation将选项:virtual_host
设置为true
。
所以在你的情况下,这样的事情应该有效:
s3.bucket('10.0.23.45:8081').object('test.bucket-name').public_url(virtual_host: true)
#=> "http://10.0.23.45:8081/test.bucket-name/"
我在查看 ruby aws-sdk Source Code
的源代码后找到了自己问题的答案 Aws.config[:s3] = { force_path_style: true }
添加以上行强制使用路径样式寻址。