无法下载 js 附件

同样的问题也出现在我们这里。我们有一些 js 文件在我们自己的软件中运行,这些文件绝不会在浏览器中执行任何操作。

我们通过将所有上传内容移至 S3 存储桶并将 s3_use_cdn_url_for_all_uploads 设置为 true,成功解决了 Discourse 的下载问题。这实际上绕过了短 URL 控制器,而该控制器似乎是导致 js 文件无法使用的根本原因。

具体步骤(由我的 AI 指导我完成):

  1. 设置 S3 兼容存储(例如 Cloudflare R2)

Discourse 无法安全地从本地磁盘提供 .js 文件。请将其移至存储桶。

  • 存储桶:创建一个私有存储桶(例如 my-discourse-bucket)。

  • API 密钥:生成访问密钥和密钥。

2. 配置自定义 CDN 域名

在 Cloudflare(或您的提供商)中,将自定义域名连接到您的存储桶(例如 cdn.example.com)。这确保文件通过直接 URL 作为静态资源提供,从而绕过 Discourse 的“安全卫士”。

3. 更新 Discourse 设置

管理 → 设置 中配置您的 S3 详细信息。关键的是,启用以下选项以确保 Discourse 不会尝试使用可能破坏链接的临时标头来“签名”URL:

  • s3_use_cdn_url_for_all_uploads勾选此框(这是最重要的步骤)。

  • s3_cdn_url:设置为 https://cdn.example.com

  • s3_region:使用 us-east-1(适用于 R2 兼容性)。

4. 迁移现有上传(可选)

注意:由于未知原因,此方法对我们无效。

要修复现有帖子中的旧链接,请进入您的容器并运行:

Bash

# 在 /var/discourse 内
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

希望这对大家有所帮助。