无法迁移到 S3,因此无法从备份恢复

好的,在深入数据库进行排查后,我找到了原因。看起来是原始的、早已废弃的 S3 环境(或者更准确地说,是由于成本效益不高而未被主要使用的 S3 环境)遗留了 71 个上传文件。

我最终采取了以下步骤:

从源服务器:

  1. ./launcher enter app

  2. sudo -u postgres psql discourse

  3. SELECT url FROM uploads WHERE url NOT LIKE '%ExpectedS3DomainGoesHere%
    (将 ExpectedS3DomainGoesHere 替换为您 S3 配置的实际 URL)
    这将获取您需要处理的 URL,因为我们需要执行一些操作。

  4. 对于来自不同 URL 的旧存储桶的 URL,请使用 Amazon S3 客户端(或您的 S3 存储后端客户端),并执行以下操作:
    a. 将意外 URL 的存储桶(如果可用)同步到本地存储。
    b. 将本地文件同步到新的存储桶。

  5. discourse remap OLD-URL-FROM-DB NEW-URL-FROM-DB
    尽管有人建议 在此 使用 DbHelper.remap,但 discourse 的 remap 函数运行良好。

  6. 确保数据已迁移。
    rails uploads:migrate_to_s3

  7. 重建时间!
    rails posts:rebake

  8. 再次在“源”机器/服务器上备份站点。下载最新的更新。

从新目标服务器:

  1. 按预期设置 Discourse,将源服务器上的 app.yml 等文件复制到新服务器上的 /var/discourse/containers/,以确保重建能够命中所需的正确插件等。
    请确保在 app.yml 中注释掉任何 DISCOURSE_BACKUP_LOCATION: s3 条目,如果您正在处理本地备份文件。由于 S3 在处理备份文件时出现截断问题,我采取了本地方法进行恢复。

  2. 按照 https://meta.discourse.org/t/restore-a-backup-from-command-line/108034 中的步骤将备份导入到您的服务器并进行恢复。包括重建步骤。

我花了很长时间才解决这个问题,但在深入研究数据库中的 uploads 表后,问题得到了解决。但这似乎奏效了,所以……

5 个赞