Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails AWS S3:您尝试访问的存储桶必须使用指定的端点进行寻址_Ruby On Rails_Ruby_Amazon Web Services_Amazon S3 - Fatal编程技术网

Ruby on rails AWS S3:您尝试访问的存储桶必须使用指定的端点进行寻址

Ruby on rails AWS S3:您尝试访问的存储桶必须使用指定的端点进行寻址,ruby-on-rails,ruby,amazon-web-services,amazon-s3,Ruby On Rails,Ruby,Amazon Web Services,Amazon S3,我正在尝试使用AWS SDK Core Ruby Gem删除上传的图像文件 我有以下代码: require 'aws-sdk-core' def pull_picture(picture) Aws.config = { :access_key_id => ENV["AWS_ACCESS_KEY_ID"], :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"], :region =

我正在尝试使用AWS SDK Core Ruby Gem删除上传的图像文件

我有以下代码:

require 'aws-sdk-core'

def pull_picture(picture)
    Aws.config = {
        :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
        :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
        :region => 'us-west-2'
    }

    s3 = Aws::S3::Client.new

    test = s3.get_object(
        :bucket => ENV["AWS_S3_BUCKET"],
        :key => picture.image_url.split('/')[-2],   
    )
end
但是,我得到以下错误:

您试图访问的存储桶必须使用指定的端点寻址。请将所有未来请求发送到此终结点

我知道该地区是正确的,因为如果我将其更改为
us-east-1
,将显示以下错误:

指定的密钥不存在


我做错了什么?

这个桶似乎是在另一个地区创建的,即不是美国西部2号。这是我唯一一次看到“您试图访问的存储桶必须使用指定的端点寻址。请将所有未来的请求发送到此端点。”

美国标准为
US-east-1


检查控制台中的bucket位置,然后将其用作要使用的端点的参考:

对于许多S3API包(我最近遇到了这个问题),您可能会遇到该地区被认为是美国标准的问题,如果选择在该区域之外托管bucket,则按名称查找需要显式定义该区域。

我遇到了类似的错误,因为bucket位于region
us-west-2
中,并且URL模式的路径中有bucketname。有一次,我改变了URL模式,将bucketname作为URL子域来抓取文件,结果成功了

例如,以前的URL是

https://s3.amazonaws.com/bucketname/filePath/filename
然后我将其替换为

https://bucketname.s3.amazonaws.com/filePath/filename

对于仍面临此问题的ppl,请尝试将s3_主机添加到配置哈希中,如下所示

   :storage => :s3,
   :s3_credentials => {:access_key_id => access key,
   :secret_access_key => secret access key},
   :bucket => bucket name here,
   :s3_host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.

这为我解决了这个问题。

在创建S3Client的过程中,您可以指定到特定区域的端点映射。如果默认值为
s3.amazonaws.com
,则将在北弗吉尼亚州的
us-east-1
中创建bucket

AWS文档中有关S3端点和区域的更多详细信息:

因此,在创建S3Client和使用同一区域中的同一客户端访问S3资源时,始终确保端点/区域


如果bucket是从AWS S3控制台创建的,则检查控制台中该bucket的区域,然后使用上述链接中提到的端点详细信息在该区域中创建S3客户端

当我试图访问一个不存在的bucket时,出现了这个错误


我错误地将path变量与bucket name变量切换,因此bucket name具有文件路径值。因此,如果您在请求中设置的bucket名称是正确的,可能需要再次检查。

我也有同样的错误。它发生在s3客户端创建时使用的端点与创建bucket时设置的端点不同

  • 错误代码-存储桶是用EAST Region设置的
s3Client=新AmazonS3Client(AWS_访问密钥、AWS_保密密钥、RegionEndpoint.USWest2)

  • 修理

s3Client=New Amazon3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint.USEast1

我也遇到过同样的问题。经过一番努力,我发现真正的问题是com.amazonaws依赖项。添加依赖项后,这个错误消失了。

上述答案都没有解决我的问题

上面的答案可能更可能是问题的原因,但我的问题是我使用了错误的bucket名称。这是一个有效的桶名,它不是我的桶


我指向的bucket位于lambda函数的另一个区域,所以请检查您的bucket名称

我住在英国,一直在为“us-west-2”地区努力。因此,被重定向到“eu-west-2”。S3的正确区域是“eu-west-2”

当我对用户用于创建S3存储桶的策略(访问密钥/密钥)有源ip约束时,我就遇到了这种情况。我的IP是准确的——但由于某种原因它无法工作,并给出了这个错误。

经过长时间的搜索,我找到了一个有效的解决方案。问题是因为错误的
地区代码

下面是区域代码列表,设置适当的区域代码,您的问题将得到解决

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1
点击右下角的bucket name,您可以找到您的地区代码


有关模式详细信息,我在使用不同的AWS配置文件时遇到此问题。我在使用具有管理员权限的帐户时看到了错误,因此权限问题的可能性似乎不大


从用户的角度来看,AWS很容易发出与所需操作几乎没有关联的错误消息,这真是我的一大烦恼。

在我的例子中,我选择了错误的RegionEndpoint。在选择了正确的RegionEndpoint之后,它开始工作:)

我从来没有想到过,但它对我起了作用!在AWS SDK中,“美国标准”区域似乎是AWSRegionUSEast1。我们正在寻找如何设置区域的答案。谢谢如果您使用的是Ruby客户端,请在初始化客户端之前将
ENV[“AWS_REGION”]
设置为bucket的正确值(例如
“us-east-1”
),如果您需要使用多个bucket(例如dev/staging/production等),我在Java中也遇到了同样的问题。你的解决方案有帮助。他们在S3中使用奇怪的名称。区域的端点,存储库中对象名称的键…您能解释一下如何操作吗?将
区域:“us-west-1”替换为什么?@AamirAfridi它取决于您使用的SDK。我使用的是iOS SDK,在凭证提供程序中,有一个参数,您可以在其中设置区域。我已经将其设置为我打算使用的区域。我刚刚有一个类似的例子,我优化了bucket的区域,但我建议更新域名。修复方法是用新域名替换以前的域名,如S3控制台中该bucket的端点引用所示。示例:我替换了
https://s3.amazonaws.com/mybucket/myasset.jpg
https://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.