可以将AWS Gem与Paperclip一起用于DigitalOcean Spaces服务吗?

时间:2017-10-07 06:59:21

标签: ruby-on-rails amazon-web-services amazon-s3 aws-sdk digital-ocean

我尝试使用带Ruby On Rails的aws-sdk + Paperclip gems来使用DigitalOcean Spaces上传文件

我遇到的问题是配置的结果,我得到“{name_buncket} .s3.nyc3.amazonaws.com”而不是“{name_buncket} .s3.nyc3.digitaloceanspaces.com”,最后是正确的结果访问DigitalOcean Spaces

aws-sdk gem是亚马逊服务独有的?如果是这样的话,是否存在与aws-sdk类似的其他宝石?

这是我使用的配置:

config.paperclip_defaults = {
    storage: :s3,
    url: '.....',
    s3_region: 'nyc3',
    s3_credentials: {
    bucket: '......',
    access_key_id: "......",
    secret_access_key: "........",
    s3_host_name: 'nyc3.digitaloceanspaces.com'
  }
}

3 个答案:

答案 0 :(得分:1)

我认为你现在运气不好,虽然不是你目前遇到的主机名问题。

s3_host_name密钥应位于s3_credentials块之外。如果您将配置更改为:

config.paperclip_defaults = {
  storage: :s3,
  url: '.....',
  s3_region: 'nyc3',
  s3_credentials: {
    bucket: '......',
    access_key_id: "......",
    secret_access_key: "........"
  },
  s3_host_name: 'nyc3.digitaloceanspaces.com'
}

你应该修正你的主机名问题。

但是,目前 这只会引发另一个问题:Paperclip / aws-sdk身份验证目前无法使用DigitalOcean Spaces - 请参阅this issue on GitHub

答案 1 :(得分:1)

除了设置s3_host_name之外,您还需要配置AWS SDK使用的endpoint。 Paperclip不直接公开,但可以通过s3_options进行设置我能够成功地使用Paperclip with Spaces和以下配置,其中env变量S3_HOST_NAME设置为nyc3.digitaloceanspaces.com

  config.paperclip_defaults = {
    storage: :s3,
    bucket: ENV["S3_BUCKET"],
    s3_credentials: {
      access_key_id: ENV["S3_ACCESS_KEY_ID"],
      secret_access_key: ENV["S3_SECRET_ACCESS_KEY"]
    },
    s3_host_name: ENV["S3_HOST_NAME"],
    s3_host_alias: ENV["S3_HOST_ALIAS"],
    s3_region: ENV["S3_REGION"],
    s3_protocol: :https,
    s3_options: {
      endpoint: "https://" + ENV["S3_HOST_NAME"],
    },
    url: ":s3_alias_url",
    path: "/assets/:class/:attachment/:style/:filename",
  }

答案 2 :(得分:0)

我启动了Paperclip的门票,还有一台Digital Ocean也没有回复。 drosboro进入的上述例子应该在理论上有效,但事实并非如此。指定s3_host_name不执行任何操作,并显示为原始帖子中指定的主机名,但我同意该问题必须在某处出现身份验证问题。

为了测试,我切换到存储:::雾来自:s3。指定方案:' https'导致403响应,同时切换到方案:' http'导致302响应。有趣的是,使用显示json输出中的文件大小,而通过http上传结果为0.奇数。

考虑可能使用了一些较新的API选项,我切换到了AWS-SDK v3,这导致了我自己能够解决的问题。尽管如此,仍然没有骰子。如果我收到任何人的更新,我很乐意在这里发布回复。