Google Bucket 备份遇到问题

在一个原本可以正常进行备份和上传到 Google 存储桶的网站上,备份页面现在显示:

无法访问备份存储:您提供的标头或查询请求了一个未实现的功能。

我原本以为这可能是存储桶权限问题(但这不太合理,因为相同的配置几周前还能正常工作),但重新阅读该消息后,感觉似乎是 Discourse 试图执行某种未实现的操作。(这也显得有点牵强)。

向 Google 存储桶(尽管是另一个)进行 S3 上传完全正常。有一个运行 2.4.0.beta9 的生产站点和一个运行 2.4.0.beta10 的测试站点(我刚刚对测试站点进行了另一次升级)。

这是一个标准的两容器安装,仅包含标准插件,S3 设置通过 .yml 文件中的 env: 进行配置。编辑:我从 yml 中删除了这些 ENV 设置并重新构建(destroy 和 start 操作并未移除它们),但问题仍然存在。

我没有看到任何明显与我相关的提交。

编辑:还有另一个运行 2.4.0.beta8 的标准安装实例,使用相同的设置,它运行正常,因此看起来在 beta8 和 beta9 之间发生了某些变化。这确实看起来像是一个 :bug:@gerhard 这是否可能与您的备份更改有关?

附言:我检查了一个使用 DigitalOcean Spaces 的站点,其备份功能正常。

2 个赞

您是否一访问 /admin/backups 就遇到错误?我最近没有更改该区域的任何内容,但我们在 beta8beta10 之间将 aws-s3 gem 从版本 1.36.1 更新到了 1.60.1。这可能导致它不再与 Google 存储桶兼容。您可以在 CHANGELOG 中查找原因。您可以尝试使用不同版本的 gem 来缩小问题范围。

3 个赞

是的。

真糟糕。

真头疼。我会联系一位谷歌的工程师(他可能也不清楚),看看还能找到什么其他线索。

非常感谢。

3 个赞

所以,通过进入容器并编辑 Gemfile,将

gem 'aws-sdk-s3', require: false

更改为

gem 'aws-sdk-s3', '1.51.0', require: false

然后执行

bundle install --no-deployment
sv restart unicorn

来测试是否生效。通过二分法测试不同版本后发现,1.51.0 是最后一个正常工作的版本。因此,问题始于 1.52.0 版本中的“功能:在 SelectObjectContent 中添加对指定扫描范围的对象部分进行扫描的支持”。

我不确定接下来该怎么做。我想我会在 GitHub - aws/aws-sdk-ruby: The official AWS SDK for Ruby · GitHub 上提交一个 issue,但我不确定他们是否会在意,对吧?所以也许应该向 Google 提交一个工单?

目前,Discourse 在 Google Buckets 上的文件上传功能仍然正常,只是备份功能失效了。

5 个赞

这可能已经解决了,因为 Google 支持 \n\nConfigure an S3 compatible object storage provider for uploads

此主题在上次回复后 30 天自动关闭。不再允许回复。