dino
2020 年2 月 4 日 15:54
1
您好,
我正在尝试配置 Discourse 以使用 Scaleway 的 S3 兼容对象存储,但似乎无法使其正常工作,且不确定问题出在哪里。
我已通过 aws-cli 验证了两个存储桶均可正常使用,并参照 Scaleway 官方文档正确配置了 CORS 设置,因此我认为问题不在存储桶本身。
以下是我的 Discourse S3 设置(部分存储桶名称已隐藏):
当我打开备份标签页时,会收到错误提示:“Failed to list backups from S3: Aws::S3::Errors::BadRequest”。
而当我尝试上传图片时,日志中显示:“Job exception: Failed to open TCP connection to [redacted]-discourse-files.s3.fr-par.amazonaws.com :443 (getaddrinfo: Name or service not known)”。
我运行的是最新版本的 Discourse - 2.4.0.beta10 (14ae574bc5)。
我猜他们的 S3 兼容性可能不如他们自己认为的那么高?
S3 区域设置似乎也在影响这里的情况。
1 个赞
dino
2020 年2 月 4 日 16:40
3
这是可能的,但如果我输入了端点,URL 就不应该包含 amazonaws.com ,对吧?
Falco
(Falco)
2020 年2 月 4 日 16:52
4
没错,这很奇怪。可能是因为那个标新立异的顶级域名?让我看看。
@dino 试着从 s3 endpoint 中移除 https://
3 个赞
dino
2020 年2 月 4 日 19:23
5
验证不允许我执行该操作:‘s3_endpoint:值不符合所需格式。’
1 个赞
Falco
(Falco)
2020 年2 月 4 日 20:59
6
是的,那是一个错误的猜测。
我无法通过阅读相关代码找到以与你相同的 URL 结尾的方法:
这是否只影响备份?上传功能是否正常?
1 个赞
pfaffman
(Jay Pfaffman)
2020 年2 月 4 日 21:06
7
嗯,这和我之前遇到的 GCP 存储桶问题不太一样,不过你可以看看这个链接:Trouble with Google Bucket for backup - #4 by pfaffman
我后来查出了是哪个 aws-sdk-s3 gem 的升级导致 GCP 存储桶无法使用,不过我的客户最终选择切换到 AWS 存储桶作为解决方案。
dino
2020 年2 月 4 日 21:31
8
@Falco 是的,我也被难住了。
包含 amazonaws 的 URL 出现的错误 specifically 针对文件上传,而非备份。对于备份,我只收到通用错误,所以我猜两者都因 URL 问题而失效。
你能想到其他可能吗?
@pfaffman 谢谢你的提示——我会看看更改 gem 的版本是否有帮助。
1 个赞
嘿 @dino ,那个方法最后有帮助吗?我也遇到了同样的问题,我快打算放弃了,准备切换到 Amazon S3。
dino
2020 年2 月 22 日 06:31
10
嘿 @FroggyC ,
我实际上没时间调试这个问题,所以最终没有尝试更改 gem 版本。我改用了官方文档中的 Amazon S3 方法,一切立刻就能正常工作了。
很抱歉消息不太理想…
1 个赞
我也遇到了同样的问题。有什么我们可以做的来帮助调试吗?
例如,通过 CLI 访问存储桶并发送日志文件?
s3_region 被忽略了吗?因为 Scaleway 使用的值与 AWS 不同(参见 不同值 )。
您可以尝试联系 Scaleway——兼容性责任在他们身上。如果他们尚未完全兼容 AWS S3,应该修复这一问题。
你暗示这是他们的责任,但你一直忽略了 @dino 的评论:
That’s possible, but the url shouldn’t include amazonaws.com if I entered the endpoint - right?
只要(未经篡改的)s3_endpoint URL 未被直接使用,就很难让 Scaleway 相信错误在他们那边。尤其是其他 S3 客户端都能成功连接。
好的,请证明。请出示能证明这一点的文档和日志追踪记录。如果你能提供确凿的证据表明问题出在我们这边,我会查看。
好的,这正是我刚才提到的意思:
overheadhunter:
有什么我们可以帮忙调试的吗?
那么,我该如何配置 Discourse 以记录其 S3 连接尝试?一旦我们确认它要连接的确切 URL,我就可以拦截流量并分享结果。
1 个赞
elle
(elle)
2020 年4 月 10 日 10:21
17
S3 上传/备份无法工作的原因是需要将区域设置为 fr-par(或 nl-ams),而这一设置只能通过绕过 Discourse 的 SiteSetting 验证来实现:
(通过 ./launcher enter app 然后运行 rails c)
SiteSetting.find_by(name: 's3_region').update_attribute(:value, 'fr-par')
在此更改之后,上传和备份即可正常写入 Scaleway 对象存储。
Scaleway 对象存储文档
当然,这只是一个临时解决方案。一旦您通过 Web 管理界面重置或修改此站点设置,就无法将其恢复为可用状态(除非再次使用 Rails 控制台)。
我推测 AWS/S3 客户端应允许显式设置区域字符串(与当前 Web 管理界面的状态不同)。
此外,Discourse 中“EU (Paris)”下拉选项的值也具有一定的误导性,因为它对应的是 AWS 的命名规范 eu-west-3(或类似名称),而非 Scaleway 所期望的区域值。
5 个赞
啊。我们需要一个特殊的“S3 兼容区域”站点设置字段吗,@falco ?这样用户就可以输入完全任意的(从亚马逊的角度来看是“虚构的”)区域。
Falco
(Falco)
2020 年4 月 10 日 18:41
19
不必如此。
使用 S3 兼容存储的用户需要设置 S3_ENDPOINT 环境变量,该变量会覆盖 S3_REGION。
我有一篇完整的教程,专门讲解如何在 DigitalOcean 的 S3 兼容存储上配置,但我正在等待 DigitalOcean 修复其 S3 CDN 中的一个漏洞,然后再发布该教程。
如果 Scaleway 的状况比 DigitalOcean 更好,我打算尝试一下,并基于此编写我的指南。
4 个赞
没错,但他们如何_知道_要这样做呢?现有站点设置的描述中是否提到了这一点?我认为应该提及。你能修改一下吗?
3 个赞