我尝试使用带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'
}
}
答案 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,这导致了我自己能够解决的问题。尽管如此,仍然没有骰子。如果我收到任何人的更新,我很乐意在这里发布回复。