AWS CDN 和 S3 的问题

,

@Falco 这种情况还存在吗?我记得我读到过一些关于最近使用 AWS 时出现问题的消息,但我找不到那个主题了。

我在使用各种相关主题作为指南时,在使用 AWS S3 时遇到了很多问题。

备份工作正常,但使用 Cloudfront 作为 CDN 或取消注释 DISCOURSE_USE_S3 和/或 DISCOURSE_S3_BUCKET 会导致永久加载图标出现。

我怀疑我的上传存储桶和/或 Cloudfront 分配中存在配置错误,但我一直找不到错误。上传和备份存储桶都在分发后面,并且备份工作正常,所以???

discourse-cdn.repealobbba.org CNAME —> amazonassigned.cloudfront.net

DISCOURSE_CDN_URL: https://discourse-cdn.repealobbba.org

## S3 storage config
#  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: ACCESS_KEY_ID
  DISCOURSE_S3_SECRET_ACCESS_KEY: SECRET_ACCESS_KEY
  DISCOURSE_S3_CDN_URL: amazonassigned.cloudfront.net  or
#  DISCOURSE_S3_BUCKET: repeal-obbba-discuss-uploads
  DISCOURSE_S3_BACKUP_BUCKET: repeal-obbba-discuss-backups
  DISCOURSE_BACKUP_LOCATION: s3

此外,将以下内容添加到配置中

    after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

会导致 FAILED TO BOOTSTRAP 错误

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && sudo -E -u discourse bundle exec rake s3:upload_assets failed with return #<Process::Status: pid 8484 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params {"cd"=>"$home", "cmd"=>["sudo -E -u discourse bundle exec rake s3:upload_assets", "sudo -E -u discourse bundle exec rake s3:expire_missing_assets"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

一如既往……任何想法或建议都将不胜感激。

你需要添加将资产上传到 s3 的配置段。

哦。我错了,你正在做。

这表明存储桶配置有问题。

我想以前有一个主题可以生成配置存储桶的 json,但我不知道它是否还在。

1 个赞

同意
尽管备份存储桶上没有使用存储桶策略,但向上传输存储桶添加策略解决了引导失败的问题。
策略 json 文件可在 CloudFront>Distribution(分发)>your distribution(您的分发)>Edit origin(编辑源)处找到
Screenshot 2025-12-10 141220

不幸的是,持续的旋转等待图标仍然存在。

调整对象所有权和 ACL 没有改变结果。
Screenshot 2025-12-10 141936

当前设置。我相信它们是推荐的设置,或者我可能理解有误。
Screenshot 2025-12-10 141702
Screenshot 2025-12-10 141835

更改设置后,您需要运行 rant 任务以上传资源。

此外,您可以打开开发者控制台,查看文件是否尝试访问存储桶中的文件,或者 CDN 是否存在问题。

1 个赞

感谢您的继续…

是的,rake 任务已运行,但没有区别。

./launcher enter app
rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

加载指示器仍然存在。

rake uploads:migrate_to_s3 确实会产生一个错误

Migrating uploads to S3 for 'default'...
Some uploads were not migrated to the new scheme. Running the migration, this may take a while...
rake aborted!
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)
/var/www/discourse/lib/file_store/to_s3_migration.rb:156:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:59:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:126:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:36:in `each_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

至少有一个 CDN 检查器显示 discourse-cdn.repealobbba.org -->Amazon CloudFront

并且控制台仍然显示图片和 js 文件是从 CDN 加载的
Screenshot 2025-12-10 192413

资源是从 cdn 调用的,但它们在那里吗?如果不在,它们在存储桶中吗?可以从存储桶访问它们吗?

您可能在另一个存储桶中有一些上传,或者有什么东西阻止它们出现在预期位置。如果是这样,您需要像它所说的那样手动修复它们。您需要访问控制台并查看它们在上传记录中的位置。

上传资源任务似乎在工作吗?因为其他资源没有加载,所以加载指示器会一直运行。

1 个赞

是的,它们在那里,文件在存储桶中,路径为 assets
可访问:https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

只有两个存储桶,uploads 和 backups。备份运行正常。

rake s3:upload_assets 出现错误:
rake aborted!
Aws::S3::Errors::AccessControlListNotSupported: The bucket does not allow ACLs (Aws::S3::Errors::AccessControlListNotSupported)

切换到启用 ACL 并再次运行 s3:upload_assets edit: uploads:migrate_to_s3,但是……
FileStore::ToS3MigrationError: Some uploads could not be migrated to the new scheme. You need to fix this manually. (FileStore::ToS3MigrationError)

??? 您需要手动修复此问题。(FileStore::ToS3MigrationError)

听起来您已经修复了存储桶,它现在可以上传资产了,所以网站现在应该可以工作了。处理那些无法迁移的上传是另一个(复杂的问题)。

以下是您尝试提供服务的资产之一:

https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

证书已损坏,这就是您的问题所在。确实有一个证书,但它与 URL 不匹配。

正如我之前建议的,请查看浏览器开发者工具中的网络选项卡,并查看此内容:

1 个赞

编辑自上文
切换到 ACLs enabled 并再次运行了 s3:upload_assets edit: uploads:migrate_to_s3

s3:upload_assets 现在可以顺利完成

我看到了网络错误。证书是 AWS 的问题吗?

再次感谢您的时间!!

是的。证书与主机名不匹配。它匹配 *.cloudfront.net

这个可以工作:https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/logo-815195ae.png

这个不能工作:https://discourse-cdn.repealobbba.org/assets/start-discourse-6f03a463.br.js

这个可以工作:https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com/assets/start-discourse-6f03a463.br.js

所以你需要将你的 s3 CDN 更改为 https://repeal-obbba-discuss-uploads.s3.us-east-1.amazonaws.com —— 噢,我想那是存储桶地址,所以那不太理想,但它会起作用。

1 个赞

不太喜欢“所以那不太理想” :wink:

正在查看 AWS 备用域名作为可能的解决方案。

也许只是我,但添加一个 @Discourse 内部使用的 CDN 应该不那么困难,也不需要像 @pfaffman 这样的好心人提供支持。

也许 @Falco@sam@team (无法提及团队) 可以插话??

是的,我们托管的所有站点都使用 S3 加上 CloudFront 的组合。您现在正在浏览的这个站点也是如此。

2 个赞

感谢您的确认!看到这个之后,我将 DISCOURSE_S3_CDN_URL 重新调整回 amazonassigned.cloudfront.net,希望这能解决证书和 URL 问题。
Screenshot 2025-12-11 133250

我重建并重新运行了文档中提到的所有 rake 命令。
rake posts:rebake
rake uploads:migrate_to_s3 仍然生成 FileStore::ToS3MigrationError
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

网站加载仍然没有进展。

有什么建议吗?

事实证明这很有帮助。
Screenshot 2025-12-12 001849