恢复备份时遇到问题--SiteSetting::Upload.s3_base_url 失败--因为 enable_s3_uploads 已在数据库中设置

我有一个多站点实例上默认站点的备份。上传文件在 S3 上。我已成功创建了一个备份,并将 include_s3_uploads_in_backups 设置为 true。

当我尝试在另一个多站点实例(带有 S3)或全新的标准安装的命令行上恢复此备份时,我会收到一个错误:“Something went wrong while remapping uploads”(在重新映射上传时出现问题)。

我在 lib/backup_restore/uploads_restorer.rb 中添加了许多 puts 语句,并确定了以下代码会导致错误:

  puts “base url #{SiteSetting::Upload.s3_base_url}”

接下来的这行似乎是我调试之前失败的行:

       current_s3_base_url = SiteSetting::Upload.enable_s3_uploads ? SiteSetting::Upload.s3_base_url : nil

我尝试注释掉 discourse.conf 中的各种 S3 变量,看看是否是数据库中的某个错误值导致了问题,但它们都为空。

嗯。在干净安装上,备份失败了,现在站点返回:

{
errors: [
"`s3_upload_bucket` site setting has to be set."
]
}

所以也许数据库中设置了其他我错过的 S3 设置。是的,enable_s3_uploads 已在数据库中设置。我对 use_s3enable_s3_uploads 之间的关系感到困惑……

1 个赞

所以,已确认问题出在几年前我首次尝试设置 S3 时,我在数据库中设置了 enable_s3_uploads,这导致恢复失败,因为它会尝试上传到 S3 但信息不足。(叹气。但它在恢复 multisite/s3 实例时失败,因为一些文件“未迁移到 S3”。)

我想知道是否应该隐藏 S3 上传设置。我很确定在用户界面中设置它们不会带来任何好处。但可以在数据库中设置 S3 上传……也许吧。

恢复到标准安装的那个无法显示上传,因为它正在这样做:

      Started GET "/uploads/short-url/puhaSNHeEy1S2knGFQIAZ8lprRy.pdf" for 68.11.35.109 at 2022-01-25 19:48:06 +0000
Processing by UploadsController#show_short as PDF
  Parameters: {"base62"=>"puhaSNHeEy1S2knGFQIAZ8lprRy", "extension"=>"pdf"}
Sent file /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830b.pdf (4.4ms)
Completed 500 Internal Server Error in 130ms (ActiveRecord: 0.0ms | Allocations: 10019)
ActionController::MissingFile (Cannot read file /var/www/discourse/public/default/original/1X/b2a283b9381b837234e7d4830.pdf)

它正在查找的路径是 /var/www/discourse/public/default/original/1X/ 而不是 /var/www/discourse/public/uploads/default/original/1X/

……。 。

这是因为我尝试修复 S3 存储桶引用时进行了重新映射,这破坏了本地 URL 中的路径。

我认为这可能过于深入而对任何人都没有用。不过,我仍然认为从用户界面隐藏 S3 上传变量是个好主意。

3 个赞