将网站图片和资源(js)迁移到 S3 后,我尝试通过 /admin/upgrade 界面升级论坛。升级过程顺利,但似乎并未将资源上传到 S3 存储桶,导致网站无法访问,直到我从命令行重新构建应用。
我在命令行中设置了一个钩子来自动完成此操作。如果在网页界面中也能提供类似功能那就太好了。如果该功能已存在,请告知我。
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
不,您无法从管理区域将资产移动到 S3。您必须通过 SSH 执行此操作,因为在进行此迁移时需要执行其他任务,除非您是在全新安装上操作。
啊,我明白了。在切换到 S3 之前,我喜欢那种无缝、无需停机的升级方式。有没有办法只通过 S3 提供图片,而不通过它提供 JS 文件?
您无法通过 S3 提供 JavaScript 服务。S3 仅用于上传和提供媒体文件(如图片、文档、视频等)。
对于 JavaScript,您需要使用 CDN,例如 CloudFront。
是的,我并不是直接从 S3 提供 JS 文件,而是先将 JS 存储在 S3,然后通过 CDN 进行分发。我想问的是,我是否可以将 JS 文件本地存储,并通过 CDN 进行分发,而仅将媒体文件存储在 S3 上。
你又完全搞错了。
Discourse JS 应直接通过 CDN 提供,而 Discourse 安装作为拉取源。我不清楚你如何将 JS 放入 S3,但请记住,JS 会在重建时重新生成。你通过 S3 提供的任何内容很可能已过时,这只会带来更多麻烦。
这个问题在我按照 Configure an S3 compatible object storage provider for uploads 配置 S3 设置后开始发生。
因此他们添加了 after_assets_precompile 钩子,以便将更新后的资源上传到 S3。
我该如何修复?如果尝试通过本地服务器访问任何资源,都会返回 404 错误。必须通过 S3 访问,否则我本可以在 CDN 上设置边缘路由规则,从本地域名拉取资源请求。
如果你读了帖子标题,标题是“用于上传的对象存储”,这已经足够说明问题了。
你说的本地域名是什么意思?你的 Discourse 安装在哪里?
我说的是本地域名,即安装 Discourse 的服务器,就像 JavaScript 文件位于 Nginx 服务器上,而不是 S3 上。
RGJ
(Richard - Communiteq)
10
不幸的是,所提及的主题并未这样做,尽管它确实名为“使用对象存储进行上传
我该如何配置,以便在 Discourse 安装服务器上保留 JS 文件?