恢复到新主机

我设置了一个新主机,以便拥有一个“暂存”环境。我重新创建了相同的 discourse 安装,版本应该是一样的。我正在运行的版本是:2.8.2。

第一个评论,截至 2.8.2 版本,我的备份大小从 282MB 下降到大约 90MB。不确定原因,但我将利用一些智能信息。

我从我的论坛下载了最新的存档,并将其上传到新暂存环境的本地存储。

恢复因以下原因失败:

[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] ALTER TABLE
[2022-02-27 19:41:18] 正在迁移数据库...
[2022-02-27 19:43:00]
[2022-02-27 19:43:00] 正在重新连接到数据库...
[2022-02-27 19:43:00] 正在重新加载站点设置...
[2022-02-27 19:43:00] 正在为非员工用户禁用传出电子邮件...
[2022-02-27 19:43:02] 正在禁用只读模式...
[2022-02-27 19:43:02] 正在清除类别缓存...
[2022-02-27 19:43:02] 正在重新加载翻译...
[2022-02-27 19:43:02] 正在重新映射上传...
[2022-02-27 19:43:02] 将 'https://forum.geekbeacon.org' 重新映射到 'https://forum-staging.geekbeacon.org'
[2022-02-27 19:43:08] 正在恢复上传,这可能需要一些时间...
[2022-02-27 19:43:36] EXCEPTION: 8 个帖子未重新映射到新的 S3 上传 URL。数据库 'default' 的 S3 迁移失败。
[2022-02-27 19:43:36] /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/file_store/s3_store.rb:317:in `copy_from'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:62:in `restore_uploads'
/var/www/discourse/lib/backup_restore/uploads_restorer.rb:44:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:23:in `restore'
/var/www/discourse/script/spawn_backup_restore.rb:36:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2022-02-27 19:43:36] 正在尝试回滚...
[2022-02-27 19:43:36] 正在回滚...
[2022-02-27 19:43:36] 正在清理...
[2022-02-27 19:43:36] 正在从 discourse_functions 模式中删除函数...
[2022-02-27 19:43:36] 正在删除临时文件 '/var/www/discourse/tmp/restores/default/2022-02-27-194051' 目录...
[2022-02-27 19:43:36] 正在取消暂停 sidekiq...
[2022-02-27 19:43:36] 正在将恢复标记为完成...
[2022-02-27 19:43:36] 正在通知 'csgeek' 恢复结束...

1 个赞

这是您的问题。也许可以使用相同的 S3 存储桶并使用相同的存储桶?也许要确保名为“下载 S3 进行备份”之类的隐藏设置已打开。您需要搜索或查看源以获取该设置的名称。

或者,您可能需要查看生产站点上的其余上传是否在 S3 上。

1 个赞

我没有配置 S3,我猜可能是旧服务器上有一些未映射到有效 S3 位置的旧数据。

我回到了旧服务器,配置了 2 个存储桶,1 个用于备份,1 个用于媒体。我按照指南设置了 AWS S3,包括 CDN。

当我运行 rake uploads:migrate_to_s3 失败后,我接着运行了 posts:rebake,这似乎减少了错误数量,但它仍然失败:

请注意,迁移到 S3 目前是不可逆的!
[CTRL+c] 取消,[ENTER] 继续

正在为 'default' 迁移上传到 S3...
正在将文件上传到 S3...
 - 列出本地文件
 => 208 个文件
 - 列出 S3 文件
. => 978 个文件
 - 同步文件到 S3
................................................................................................................................................................................................................
正在更新数据库中的 URL...
正在删除旧的优化图像...
正在将所有包含灯箱的帖子标记为重新烘焙...
15 个帖子被标记为重新烘焙
rake 中止!
FileStore::ToS3MigrationError: 1 个帖子未重新映射到新的 S3 上传 URL。数据库 'default' 的 S3 迁移失败。
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:87:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(运行任务时显示 --trace 以查看完整跟踪)

有没有办法以详细模式运行 migrate_to_s3 来识别出问题的帖子?

我遇到了同样的问题,在不更改 s3 存储桶的情况下迁移了我的服务器。
有什么建议吗?

您的还原出现类似以下的错误?

FileStore::ToS3MigrationError: 1 个帖子未重新映射到新的 S3 上传 URL。数据库 'default' 的 S3 迁移失败。

在这种情况下,最好是修复上传位置不正确的帖子。但我认为有一种情况该测试可能会出现误报。在这种情况下,您可以使用 rake 任务上的一个开关来暂停它,以便您可以修复问题。我不能马上找到它,它也不在应该在的 https://meta.discourse.org/t/backup-discourse-from-the-command-line/64364。我现在正在处理一项任务,所以现在找不到它。

是的,我遇到了这类错误

EXCEPTION: 3 个帖子未重新映射到新的 S3 上传 URL。数据库 ‘default’ 的 S3 迁移失败

您可以尝试

discourse restore --pause filename

这将暂停恢复过程,您可以在另一个终端中修改数据库以修复它。或者,我想,您可以在它执行该检查之前直接停止它。

我想我必须在命令行恢复期间使用它

出现相同的错误:
正在上传文件到 S3…

  • 列出本地文件
    => 2 个文件
  • 列出 S3 文件
    … => 183549 个文件
  • 将文件同步到 S3
    ..
    正在数据库中更新 URL…
    正在删除旧的优化图像…
    正在标记所有包含灯箱的帖子以进行重新烘焙…
    169809 个帖子被标记为重新烘焙
    异常:3 个帖子未映射到新的 S3 上传 URL。数据库 ‘default’ 的 S3 迁移失败。
    /var/www/discourse/lib/file_store/to_s3_migration.rb:132:in raise_or_log' /var/www/discourse/lib/file_store/to_s3_migration.rb:81:in migration_successful?’
    /var/www/discourse/lib/file_store/to_s3_migration.rb:385:in migrate_to_s3' /var/www/discourse/lib/file_store/to_s3_migration.rb:59:in migrate’
    /var/www/discourse/lib/file_store/s3_store.rb:367:in copy_from' /var/www/discourse/lib/backup_restore/uploads_restorer.rb:69:in restore_uploads’
    /var/www/discourse/lib/backup_restore/uploads_restorer.rb:49:in restore' /var/www/discourse/lib/backup_restore/restorer.rb:179:in restore_uploads’
    /var/www/discourse/lib/backup_restore/restorer.rb:72:in run' script/discourse:243:in restore’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/command.rb:28:in run' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/invocation.rb:127:in invoke_command’
    /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor.rb:538:in dispatch' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.4.0/lib/thor/base.rb:584:in start’
    script/discourse:397:in \u003ctop (required)\u003e’ /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in load’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:59:in kernel_load' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli/exec.rb:23:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:452:in exec' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/command.rb:28:in run’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in invoke_command' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor.rb:538:in dispatch’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:35:in dispatch' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/vendor/thor/lib/thor/base.rb:584:in start’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/cli.rb:29:in start' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:28:in block in \u003ctop (required)\u003e’
    /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/lib/bundler/friendly_errors.rb:117:in with_friendly_errors' /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.6.4/exe/bundle:20:in \u003ctop (required)\u003e’
    /usr/local/bin/bundle:25:in load' /usr/local/bin/bundle:25:in
    正在尝试回滚…
    正在回滚…
    正在清理…
    正在从 discourse_functions 模式中删除函数…
    正在删除 tmp ‘/var/www/discourse/tmp/restores/default/2026-01-13-145033’ 目录…
    正在取消暂停 sidekiq…
    正在将恢复标记为完成…
    正在通知 ‘system’ 恢复结束…
    完成!

您需要修复那三个上传,或者在执行该检查之前停止还原。

我如何能找到
168000 中的 3 个帖子?
是否可以在跳过验证的情况下停止恢复?

我会查看执行该测试的代码,然后运行相同的查询。我可能之前发布过执行此操作的代码。

我发布了

你做过吗?我想在恢复完成后你可以直接按 Control-C 停止。你是在只恢复数据库吗?

哦,该死,我没想到在数据库恢复之后、上传之前停止恢复。
我不需要从 S3 迁移上传文件——我能只迁移前端和数据库吗?

你能告诉我哪个选项可以让你停止对帖子执行 rake 操作并识别出有问题的内容吗?那将非常感激。

有什么建议吗?谢谢