バケット (バケットが作成された場所) の地域固有のエンドポイントを構成する必要があります。これは次の方法で実行できます。
AWS.config(:s3_endpoint => '...')
s3 = AWS::S3.new
また
s3 = AWS::S3.new(:s3_endpoint => '...')
今後は、DNS 互換のバケット名を使用することでこれを回避できます (バケット名にドットも使用しないでください)。バケット名が有効なサブドメインである場合、リージョン固有のエンドポイントを構成せずにバケットをアドレス指定できます。次の点を考慮してください。
http:://bucket-name.s3.amazonaws.com/path/to/object.txt
バケットの名前は「bucket-name」で、オブジェクト キーは「path/to/object.txt」です。このバケットはどのリージョンにも存在する可能性がありますが、「デフォルト」リージョンを使用してアクセスできます。バケット名が dns 互換でない場合、URL は次のようになります。
http://s3.amazon.com/bucket/name/path/to/object.txt
上記の例では、バケットは「bucket/name」であり、DNS と互換性がありません。これはパスの一部になり、s3.amazon.com をリージョン固有のエンドポイントに置き換える必要があります (バケットがクラシック リージョンで作成されていない場合)。
他の誰かが述べたように、パスはバケット名ではなく、オブジェクト キーの一部である必要があります。これにより、共通のプレフィックスでオブジェクトをグループ化できます。「/」は仮想フォルダーとして使用されます (慣例のみ)。
# print the key of every object with the given prefix
s3.buckets['bucket-name'].objects.with_prefix('path/to/').each do |object|
puts object.key
end