# 恢复备份时遇到问题--SiteSetting::Upload.s3\_base\_url 失败--因为 enable\_s3\_uploads 已在数据库中设置

**URL:** <https://meta.discourse.org/t/trouble-restoring-backup-sitesetting-upload-s3-base-url-is-failing-because-enable-s3-uploads-was-set-in-database/215966>\
**Category:** General\
**Created:** [2022年一月25日 17:57 UTC](https://meta.discourse.org/t/trouble-restoring-backup-sitesetting-upload-s3-base-url-is-failing-because-enable-s3-uploads-was-set-in-database/215966 "2022-01-25T17:57:35Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年一月25日 17:57 UTC](https://meta.discourse.org/t/trouble-restoring-backup-sitesetting-upload-s3-base-url-is-failing-because-enable-s3-uploads-was-set-in-database/215966/1 "2022-01-25T17:57:35Z")

</div>

我有一个多站点实例上默认站点的备份。上传文件在 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 变量，看看是否是数据库中的某个错误值导致了问题，但它们都为空。

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

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

```

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

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年一月25日 18:44 UTC](https://meta.discourse.org/t/trouble-restoring-backup-sitesetting-upload-s3-base-url-is-failing-because-enable-s3-uploads-was-set-in-database/215966/2 "2022-01-25T18:44:49Z")

</div>

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

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

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

```plaintext
      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 上传变量是个好主意。
