1

我在我们的 Rails 应用程序中使用sitemap_generator并尝试创建站点地图并将其上传到 DigitalOcean 空间(据我所知,它与 s3 兼容)但我无法覆盖站点地图适配器中的端点属性,因此它始终假定我的端点是亚马逊而不是 digitalocean

我得到的错误是:

Aws::Errors::NoSuchEndpointError: Encountered a `SocketError` while attempting to connect to:

  https://BUCKET_NAME.s3.XXXX.amazonaws.com/sitemaps/en/english.xml.gz

This is typically the result of an invalid `:region` option or a
poorly formatted `:endpoint` option.

我在这部分的 sitemap.rb 配置中的代码是:

SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
  ENV["BUCKET_NAME"],
  aws_access_key_id: ENV["S3_KEY"],
  aws_secret_access_key: ENV["S3_SECRET"],
  aws_endpoint: "https://XXXX.digitaloceanspaces.com",
  aws_region: 'XXXX'
)

我尝试使用另一个适配器,但我得到一个更加模棱两可的错误(显然相同,无法连接)

SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new(
  aws_access_key_id: ENV["S3_KEY"],
  aws_secret_access_key: ENV["S3_SECRET"],
  fog_provider: 'AWS',
  fog_directory: ENV["BUCKET_NAME"],
  endpoint: "https://XXXX.digitaloceanspaces.com",
  fog_region: 'XXXX'
)
4

1 回答 1

0

我认为这里的问题是此 gem 的 AWS sdk 适配器当前不支持“端点”选项。以下是当前支持的选项

def initialize(bucket, options = {})
  @bucket = bucket
  @aws_access_key_id = options[:aws_access_key_id]
  @aws_secret_access_key = options[:aws_secret_access_key]
  @aws_region = options[:aws_region]
end

端点选项告诉 AWS sdk 覆盖默认服务端点以使用 DigitalOcean 而不是 AWS:https ://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Endpoint.html

要让 sitemap_generator gem 的 AWS sdk 适配器与 DigitalOcean 空间一起使用,需要合并一个新的拉取请求,以添加端点选项。

于 2020-05-03T16:25:03.083 回答