如果您需要帮助深入排查此类问题的根本原因,请随时告诉我。我很乐意提供帮助。
所以我尝试恢复我的 2.2GB 备份,结果出现了以下错误——恢复失败:
异常:44 篇帖子未重新映射到新的 S3 上传 URL。数据库 ‘default’ 的 S3 迁移失败。
我使用的是 2.6b6 版本,算是比较新的版本。该站点较老,创建于 2016 年。
我们时不时会遇到备份自动重新映射并迁移到 S3 因各种原因失败的情况。
这是一个老话题,请问有什么建议的补救措施吗?拥有一个无法实际用于恢复的备份让我有些不安。
编辑:我刚刚意识到我可能发错了帖子,因为这看起来是同一个问题:
好吧,这是我目前见过的最奇怪的情况。我偶然发现了这篇帖子。
https://meta.discourse.org/t/using-object-storage-for-uploads-s3-clones/148916/160?u=ljpp
在已经为此浪费数小时之后,我出于好奇定义了 DISCOURSE_CDN_URL,而我的网站实际上并未使用此功能。备份成功恢复了。
在这个场景中,这个参数的意义是什么?@Falco @pfaffman
编辑:
我收回刚才的话。在测试成功后,我从生产环境进行了全新的备份,并再次开始迁移到新服务器。这次又失败了,但错误信息发生了变化。
异常:rake posts:missing_uploads 检测到 3 个问题。S3 迁移在数据库‘default’上失败。
编辑 2:
于是我继续深入排查数据库,找到了这三篇帖子。
- 其中两篇是非常旧的图片,最初发布后,版主用修改后的版本替换了图片。这些分别来自 2016 年和 2018 年。
- 但最后一篇很奇特。那是我自己几周前发布的一篇非常新的帖子,其中包含一个指向已不存在开发服务器的 oneboxed https 链接。因此,一个损坏的链接导致恢复过程失败。
我直接手动删除了这些帖子。
现在,再次进行测试运行,显示备份可能确实能够成功。我们拭目以待。
@ljpp 我似乎也遇到了类似的情况,恢复操作失败,报错如下:
异常:1 篇帖子未重新映射到新的 S3 上传 URL。数据库 ‘default’ 的 S3 迁移失败。
能否详细说明一下你是如何找到并删除那些有问题的帖子的?使用了哪些命令?
他删除了相关帖子。
但你重装了系统,所以无法那样做,对吧?
我恢复数据库时遇到了这个问题。您是如何找到有问题的帖子的?
我认为执行检查的代码在这里:
所以我想是这样:
prefix = @migrate_to_multisite ? "uploads/#{@current_db}/original/" : "original/"
base_url = File.join(SiteSetting.Upload.s3_base_url, prefix)
bad = Upload.by_users.where("url NOT LIKE '#{base_url}%'")
为了确保万无一失
good = Upload.by_users.where("url LIKE '#{base_url}%'")
请告诉我这是否对您有效,然后我将着手创建一个主题。
discourse(prod)> prefix = @migrate_to_multisite ? “uploads/#{RailsMultisite::ConnectionManagement.current_db}/original/” : “original/”
discourse(prod)> base_url = File.join(SiteSetting.Upload.s3_base_url, prefix)
discourse(prod)> bad_uploads = Upload.by_users.where(“url NOT LIKE ‘#{base_url}%’”)
discourse(prod)> bad_uploads.count
=> 0
此检查未发现任何错误
您是在原始服务器上执行的吗?还是需要在数据库恢复后,在执行该检查之前使用 --pause 开关来执行?
我在旧服务器上执行了此操作。
恢复时我遇到了相同的错误
[2026-01-16 13:45:52] 异常: 3 个帖子未重新映射到新的 S3 上传 URL。数据库 ‘default’ 的 S3 迁移失败。
[2026-01-16 13:45:52] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log’
好吧。真糟糕。不确定还能告诉你什么。
good 找到了你的上传文件吗?
我可能会只使用 --pause 选项,并在恢复执行该检查之前停止它。
我会照理查德说的做。
我不确定您的具体情况,但您可能只想关闭 s3 上传,进行备份,恢复,然后再重新开启。这帮了我很多次。
所以,我必须关闭这些选项,对吗?

正确。
- 取消勾选“启用 S3 上传”
- 备份/下载
- 上传/恢复
- 勾选“启用 S3 上传”
我不会说意大利语,除非是关于食物的……也许你可以帮大家一个忙,把它复制/粘贴到谷歌翻译里 ![]()
抱歉
启用 S3 上传
将上传内容存储在 Amazon S3 磁盘空间上。重要提示:需要提供有效的 S3 凭据(包括访问密钥 ID 和访问密钥密钥)。
您无法启用 S3 上传,因为它们已在全局启用,在站点级别启用 S3 上传可能会导致上传出现严重问题。
我假设你已经在 app.yml 中完成了。
(新的)上传功能工作正常吗?如果正常,那就没有问题了。
在 app.yml 中我配置了 s3,没错。
那么,我需要怎么做才能安全地备份和恢复而无需检查上传?
简单地取消选中“启用 s3 上传”不起作用
