Digital Ocean Spaces/S3 的奇怪行为以及 `example.com` 大量重复的 CORS 规则

我最近在引导时遇到了这个错误。我使用的是 SFO3 的 Digital Ocean。

“Tasks: TOP => s3:upload_assets => s3:ensure_cors_rules”, “(See full trace by running
 task with --trace)”, “I, [2021-12-16T21:19:05.748497 #1]  INFO -- : Installing CORS rules...”, “Attempting to apply ASSETS S3 CORS ruleset in bucket pfaffmanager.”, “At
tempting to apply BACKUP_DIRECT_UPLOAD S3 CORS ruleset in bucket pfaffmanager.”]

有什么可能解释这个错误并且有解决方案吗?

嗯。我查看了设置,发现有很多看起来相同的 CORS 规则。我删除了其中一个,结果它们都被删除了。这是一个暂存服务器,我已经对其进行了无数次(或者可能是几百次?)升级,所以也许这种情况最终会发生在所有使用 Digital Ocean 的人身上,但对大多数人来说,这需要 10 年而不是 8 个月。

删除 CORS 规则后,下一次引导成功了,并且在 spaces bucket 的设置中有 2 条 CORS 规则。但是看——规则似乎是为 example.com. 设置的 :man_shrugging:

我确信我引导过很多次的 AMS3 中的另一个 bucket 有 3 条与上述相同的规则。都是为 example.com。我检查了 app.yml,看看我是否在做一些愚蠢的事情(如果我做了,那么我会在很多地方以同样的方式做),但 yml 中没有 example.com

在重建时,我在日志中看到这个:

                                                                                                                                                                         
I, [2021-12-16T21:46:58.038151 #1]  INFO -- : > cd /var/www/discourse & sudo -E -u discourse bundle exec rake s3:upload_assets                                          
I, [2021-12-16T21:47:39.039145 #1]  INFO -- : Installing CORS rules...                                                                                                   
Attempting to apply ASSETS S3 CORS ruleset in bucket pfaffmanager.                                                                                                       
Attempting to apply BACKUP_DIRECT_UPLOAD S3 CORS ruleset in bucket pfaffmanager.                                                                                         
Assets rules status: rules_applied.                                                 
Backup rules status: rules_applied.                                                                                                                                      
Direct upload rules status: rules_skipped_from_settings.

我在 s3_backup_store.rb 等代码中查找 example.com,但找不到解释。

3 个赞

看起来我们应该像在使用对象存储进行上传(S3 和克隆)中为 GCP 和 BackBlaze 所做的那样,为 DO 推荐 DISCOURSE_S3_INSTALL_CORS_RULE: false :thinking:

4 个赞

你好,

抱歉复活这个话题,但我想我几天前遇到了一个相关问题。

我的设置:

Digital Ocean Spaces,具有 s3:upload_assetss3:expire_missing_assets
CDN - Bunny

似乎每次重建或管理员更新上传资产时,都会生成一个新的 CORS 规则。实际上是复制了原始规则。不幸的是,我没有复制控制台错误消息,但在上传资产之前,它曾显示“已达到 CORS 规则的最大数量 100”。所以我去了 Digital Ocean 检查规则,发现确实有 100 条。:smiley: 所以我做了和 @pfaffman 一样的操作,我删除了一个,它删除了所有规则。之后,资产在重建时成功上传。

设置时,我遵循了这里的说明:Configure an S3 compatible object storage provider for uploads

添加这一行是否可以阻止生成重复的 CORS 规则?谢谢 :slightly_smiling_face:

我更新了另一个主题,希望将来不会再发生这种情况!感谢您指出这一点。

2 个赞