从备份恢复因 S3 迁移而失败

我尝试将我的 Discourse 实例迁移到新服务器,但通过 UI 和 CLI 进行恢复的操作均失败。这与 S3 迁移有关。

我还在 Rails 控制台中启用了以下设置:

SiteSetting.migrate_to_new_scheme = true
Jobs::MigrateUploadScheme.new.execute(nil)

失败的相关日志如下:

将 '//thinnal.s3.dualstack.us-east-1.amazonaws.com/' 重新映射为 '/uploads/default/'
incoming_emails=2
optimized_images=3851
post_revisions=86
posts=618
stylesheet_cache=10
topic_links=107
topics=150
uploads=419
user_histories=20
正在将上传文件迁移到 S3...
检查默认数据库是否已迁移...
1977 个上传文件中有 1971 个尚未迁移到 S3。数据库 'default' 的 S3 迁移失败。
266 篇帖子的上传链接未重新映射到新的 S3 上传 URL。数据库 'default' 的 S3 迁移失败。
正在默认数据库中查找缺失的上传文件

没有缺失的帖子上传文件。

无需重新烘焙任何帖子
正在将默认数据库的上传文件迁移到 S3...
部分上传文件未迁移到新方案。请在 Rails 控制台中运行以下命令:

SiteSetting.migrate_to_new_scheme = true
Jobs::MigrateUploadScheme.new.execute(nil)
恢复过程已取消!
正在尝试回滚...
正在回滚...
正在清理...
从 discourse_functions 架构中删除函数
正在删除临时目录 '/var/www/discourse/tmp/restores/default/2019-09-02-140750'...
正在取消暂停 Sidekiq...
标记恢复为已完成...
向 'system' 通知恢复结束...
完成!
[失败]
恢复完成。

您搜索到了一份类似的报告。我认为解决方案是在恢复时关闭 S3 上传?

谢谢 @pfaffman,让我试试。你知道有没有通过命令行(rails console)禁用 S3 上传的方法?

恢复期间已禁用上传到 S3 的功能,但操作仍失败。

这是一个已知问题。作为临时解决方案,您可以在创建备份之前暂时禁用 enable_s3_uploads 站点设置。恢复后,您可以在新服务器上重新启用该设置。

谢谢!是的,我在进行备份之前禁用了上传到 S3 的功能,随后恢复操作成功完成。

你好,

如果在启用的情况下进行了备份,该怎么办?:slight_smile:

问题已解决:

我用 EmEditor 打开 dump.sql,搜索 enable_s3_uploads 和 S3,将所有“t”替换为“f”,将所有“true”替换为“false”。

恢复成功 :slight_smile:

好吧,那你得亲自动手了。抱歉。我计划下周开始重构并改进备份和恢复功能,但要让一切恢复正常可能需要一段时间。

太棒了!我本来也正打算建议完全相同的步骤。:wink:

给未来阅读此内容的任何人:如果你需要编辑 dump.sql(文件可能相当大),我建议使用 Scintilla and SciTE 作为编辑器。它可以毫无问题地处理这些大文件。