图片上传错误:存储桶不允许ACL

用户甚至管理员都无法再上传图片了。
错误日志显示热链接错误。
限制为 4MB,但在用户抱怨后,我尝试上传了一个 800KB 的文件作为测试。

我们几天前进行了一次更新(2.9.0.beta4)。
我们最近设置了 s3 存储桶。

我注意到 GitHub 上 15 天前有一个关于热链接的修复。
我无法在 GitHub 上创建问题。这里是报告错误的地点吗?

消息(已报告 2 条)

默认:未能拉取热链接的图片 (https://jackrail.space/images/discourse-logo-sketch-small.png) 帖子:586
存储桶不允许 ACL
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/raise_response_errors.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/sse_cpk.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/dualstack.rb:36:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/plugins/accelerate.rb:50:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/idempotency_token.rb:19:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/param_converter.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/request_callback.rb:71:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/aws-sdk-core/plugins/response_paging.rb:12:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/plugins/response_target.rb:24:in `call'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-core-3.121.2/lib/seahorse/client/request.rb:72:in `send_request'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/client.rb:11274:in `put_object'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/aws-sdk-s3-1.96.1/lib/aws-sdk-s3/object.rb:1329:in `put'
/var/www/discourse/lib/s3_helper.rb:74:in `upload'
/var/www/discourse/lib/file_store/s3_store.rb:116:in `store_file'
/var/www/discourse/lib/file_store/s3_store.rb:30:in `store_upload'
/var/www/discourse/lib/upload_creator.rb:212:in `block (2 levels) in cr...

回溯

/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:243:in `public_send'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:243:in `log'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:58:in `rescue in block in execute'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:35:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:234:in `block in each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:233:in `upto'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/nokogiri-1.13.4-x86_64-linux/lib/nokogiri/xml/node_set.rb:233:in `each'
/var/www/discourse/app/jobs/regular/pull_hotlinked_images.rb:34:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'

但我不能确定此功能的作用,或者它是否会禁用我的 s3 备份。
“启用 s3 上传”
我启用了此功能,以为这是备份过程的一部分。
我禁用了此功能,并且在我上传测试图像时不再收到此错误。

该设置会将您的上传内容放入 S3 存储桶,并且与上传是分开的。听起来该存储桶没有正确编码用于上传(请参阅 将对象存储用于上传(S3 和克隆) 获取信息)。

您仍应检查您的备份是否正常工作。

1 个赞

我猜那就是问题所在,并且抱怨的用户已经确认问题已修复。

我不确定这个图片上传有什么作用,但我想这可能是一些复杂服务器需要的一些额外功能。我想我们这 40 个用户不需要这种复杂功能的 Discourse。我们更关心表情符号点赞。

但是,当我按照 S3 说明操作时,我不得不回头创建一个新的“备份”存储桶,而原来的存储桶用于上传(因为我按照设置中出现的顺序进行的)。我想我可能会在 S3 说明中添加一些更多信息作为回复,以帮助其他人更容易遵循。此外,帮助线程中列出的权限策略不存在,我最终从另一个网站找到了一个“*”解决方案。我会在该线程中尝试帮助澄清这一点。它奏效了,但需要对说明进行一些工作和调整。

这些操作无效……我改用了 *。

"Action": [
           "s3:ListAllMyBuckets",
           "s3:HeadBucket"
       ],

我用来配置和遵循说明的帖子在这里:here

它也标记了启用 S3 上传为已勾选。似乎让事情变得对普通用户来说太复杂了。
另一方面,我希望我的备份在没有它的情况下也能正常工作。

你为什么改用了 *?

我在谷歌搜索时在某处找到了它,只是为了让它接受代码。如果你看我引用的帖子,我提供了链接。我通常只是谷歌搜索然后复制粘贴。 :slight_smile: 然而,我后来注意到图像上传并非备份工作的必需品。我仍然不知道为什么有人会使用它。你只需要备份。你不需要两个存储桶。我在设置中取消了该选项,因为我仍然遇到上传错误,并且用户不允许上传图像。取消勾选该项目后,问题就解决了。我们有一个小型服务器组,所以我们很长一段时间都会没问题。