S3(非 AWS)随机停止工作,据推测是在一次更新后

我有一个存储桶设置,但它似乎正在尝试使用默认设置?

我使用 GarageHQ 作为轻量级的 MinIO 替代品。

我使用的是 3.6.0.beta1-dev
ed6beea336

[2025-09-14 10:40:34] 正在删除临时文件 ‘/var/www/discourse/tmp/backups/default/2025-09-14-104012’ 目录…
[2025-09-14 10:40:34] 正在上传存档…
[2025-09-14 10:40:35] 异常:存储桶未找到:default

[2025-09-14 10:40:35] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/dualstack.rb:21:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/plugins/accelerate.rb:43:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/checksum_algorithm.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/invocation_id.rb:16:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/request_callback.rb:89:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/telemetry/no_op.rb:29:in `in_span'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:53:in `span_wrapper'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/telemetry.rb:39:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/client.rb:3710:in `create_multipart_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:67:in `initiate_upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/multipart_file_uploader.rb:58:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:42:in `block in upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/file_uploader.rb:40:in `upload'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:477:in `block in upload_file'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-core-3.227.0/lib/aws-sdk-core/plugins/user_agent.rb:90:in `metric'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/aws-sdk-s3-1.182.0/lib/aws-sdk-s3/customizations/object.rb:476:in `upload_file'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:48:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:351:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'

上次备份是昨天,但现在它不再工作了,其他服务仍然可以备份到我的本地 S3 而没有问题。

有人知道我该如何解决这个问题吗?

是的。AWS 破坏了许多其他服务的 S3 库。

Can't rebuild due to AWS SDK gem bump and new AWS Data Integrity Protections 包含一些解决方法。

我创建了这个 aws-revert-template.yml 来回滚到旧版本。我不知道它是否还有效;我的文件日期是 2025-08-06T05:00:00Z

嗯,我不太确定这是否是问题所在

除非我弄错了,我已经在 3.6 上运行了超过两天,但我还是在两天前和十天前进行了备份。

没多大区别。我认为你记错了。

这是你正在使用的提交:

但还有:

你的 bucket 叫 “default” 吗?

是的,我现在就在提交,最初发布此问题时我不在,我已更新以排除错误。

不,正如 OP 中所述,这就是为什么我不认为这是您所指的相同问题,我的存储桶已指定,我已在备份部分的 UI 设置和 YAML 中的环境变量中都尝试过,它仍然尝试使用默认值

为澄清起见,自停止工作以来,Discourse 或 Garage 端没有任何变化,除了更新到 3.5 然后到 3.6

1 个赞

也许有人能实际检查一下 S3 是否正确选择了存储桶?其他第三方,如 Backblaze、R2 等也是如此?

所以我创建了一个名为“Default”的存储桶,它的工作符合预期,所以是的,它没有正确地选择我告诉它的存储桶名称。

除非成千上万的人和 CDCK 托管也会受到影响,但他们没有。更有可能的是,你在 app.yml 中的某一行删除了字符或添加了字符。

你可以做这样的事情:

grep -i S3 /var/discourse/containers/*
docker exec -it app bash -c 'grep s3 /var/www/discourse/config/discourse.conf

如果你在设置中配置了 s3 而不是使用环境变量,那么你可以看看 为上传配置 S3 兼容对象存储提供商 来了解它们的样子。

我的设置没有任何问题,唯一改变的就是 discourse 更新。我尝试了在 yaml 中配置,也在 UI 中配置,UI 设置明确显示为“cyanlabs-community”,但备份仍然尝试保存到“default”。

尽管 UI 中配置了 S3,但 discourse.conf 文件不包含任何 S3 引用,正如你的第二个命令所示。

但这表示存储桶不存在,你能尝试创建一个全新的存储桶和凭据,看看在那里上传是否有效?

1 个赞

但我觉得我在这里兜圈子。

对话开始时,存储桶“default”并不存在,此后我已创建它,并且它使用了该存储桶,尽管在设置中已将存储桶设置为“cyanlabs-community”。

“cyanlabs-community”和“default”都存在于 S3 实例中,但无论我尝试什么,Discourse 都不会使用“cyanlabs-community”。

新存储桶 cyanlabsdiscourse

备份结果

[2025-09-22 15:14:59] Finalizing backup...
[2025-09-22 15:14:59] Finalizing database dump file: cyanlabs-official-community-2025-09-22-151437-v20250916082012.sql.gz
[2025-09-22 15:14:59] Removing tmp '/var/www/discourse/tmp/backups/default/2025-09-22-151437' directory...
[2025-09-22 15:14:59] Uploading archive...
[2025-09-22 15:15:37] Executing the after_create_hook for the backup...
[2025-09-22 15:15:37] Deleting old backups...
[2025-09-22 15:15:37] Cleaning stuff up...
[2025-09-22 15:15:37] Removing archive from local storage...
[2025-09-22 15:15:37] Removing '.tar' leftovers...
[2025-09-22 15:15:37] Marking backup as finished...
[2025-09-22 15:15:37] Refreshing disk stats...
[2025-09-22 15:15:37] Notifying 'CyanLabs' of the end of the backup...
[2025-09-22 15:15:40] Finished!

cyanlabsdiscourse 存储桶

default 存储桶

有趣的是,它仍然尝试在 bucketname.s3.domain.tld 上建立连接,例如 cyanlabsdiscourse.s3.domain.tld,因为如果没有添加 DNS 记录,它在该子子域上将无法工作。因此,设置被遵守用于 URL,但似乎被存储桶选择忽略了。

我感觉我已经尝试了一切,暂时我猜我只能使用默认存储桶了。

AWS 真是神秘!很抱歉您未能成功使用您偏好的存储桶名称。由于无法复现问题,很难提供帮助,所以我想您只能接受使用默认名称作为存储桶名称了。