这听起来像是 Can't restore a backup if it includes link to Discourse onebox 中提到的问题 ![]()
您应该能够在恢复过程中修复此问题,但需要在 shell 中进行操作。
cd /var/discourse
./launcher enter app
# 使用 --pause 参数开始恢复
discourse restore --pause <backup_filename>
它将在两个点暂停恢复过程:
- 在运行数据库迁移之前——您可以忽略它;按任意键继续
- 在恢复上传之前。您将可以访问未修改的
uploads表(尚未运行任何重新映射),这允许您在恢复过程因它们而中止之前修复上传。
现在,打开到服务器的另一个 SSH 会话并启动 rails 控制台:
cd /var/discourse
./launcher enter app
rails c
您需要找出哪个 Post 导致恢复失败。如果运气好的话,您可以通过在 rails 控制台中执行以下命令找到它:
current_db = RailsMultisite::ConnectionManagement.current_db
cdn_path = SiteSetting.cdn_path("/uploads/#{current_db}/original").sub(/https?:/, "")
Post.where("cooked LIKE '%#{cdn_path}%'")