在 discourse 中还原备份的问题

这听起来像是 Can't restore a backup if it includes link to Discourse onebox 中提到的问题 :anxious_face_with_sweat:

您应该能够在恢复过程中修复此问题,但需要在 shell 中进行操作。

cd /var/discourse
./launcher enter app

# 使用 --pause 参数开始恢复
discourse restore --pause <backup_filename>

它将在两个点暂停恢复过程:

  1. 在运行数据库迁移之前——您可以忽略它;按任意键继续
  2. 在恢复上传之前。您将可以访问未修改的 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}%'")
7 个赞