# Discourse接入S3储存后，已经在在本地的能迁移吗？

**URL:** <https://www.isharkfly.com/t/discourse-s3/16142>\
**Category:** Discourse\
**Tags:** discourse\
**Created:** [August 15, 2024, 2:44am UTC](https://www.isharkfly.com/t/discourse-s3/16142 "2024-08-15T02:44:54Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 15, 2024, 2:44am UTC](https://www.isharkfly.com/t/discourse-s3/16142/1 "2024-08-15T02:44:54Z")

</div>

Discourse的备份是一个压缩包

解压之后一个是数据库，另一个是上传文件（uploads）

**使用S3储存以后，这个Uploads将不会出现在备份文件当中，而是储存在对象储存**

每次备份都 **只会备份数据库** ， **除非** 开启某个 **设置选项** ，允许备份S3储存的Uploads

## 提问环节

请问，如果我此时 **使用了本地储存** 一段时间了， **备份文件里面的Uploads已经很庞大了**

我能否 **手动** 将备份文件里的 **Uploads** 覆盖\>\>\>\>\>\>\>\>到 **S3储存里的Uploads？**

对于原本已经被话题引用的图片文件，他们能正常显示吗？

（Discourse对于图片储存方式是通过随机的名字来区分的，例如 **upload://ob9K7RhMbch2b2oTnJNi0bYCNPi.png** )

_Poll ([view on site](https://www.isharkfly.com/t/discourse-s3/16142/1))_

---

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 15, 2024, 2:50am UTC](https://www.isharkfly.com/t/discourse-s3/16142/2 "2024-08-15T02:50:37Z")

</div>

@Lhcfl 您有什么看法？

---

<div class="post-metadata">

**Author:** ![VegaMonika](https://www.isharkfly.com/user_avatar/www.isharkfly.com/vegamonika/32/14424_2.png) [@VegaMonika](https://www.isharkfly.com/u/VegaMonika)\
**Post date:** [August 15, 2024, 3:47am UTC](https://www.isharkfly.com/t/discourse-s3/16142/3 "2024-08-15T03:47:09Z")

</div>

Discourse能接入微软云盘吗 S3存储好麻烦

---

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 15, 2024, 3:48am UTC](https://www.isharkfly.com/t/discourse-s3/16142/4 "2024-08-15T03:48:30Z")

</div>

云盘似乎不属于S3类型

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 15, 2024, 4:07am UTC](https://www.isharkfly.com/t/discourse-s3/16142/5 "2024-08-15T04:07:56Z")

</div>

直接覆盖应该是无法正常显示的。

我记得 uploads 表中有个 s3 的路径，这个应该也需要修改下的吧。

---

<div class="post-metadata">

**Author:** ![Lhcfl](https://www.isharkfly.com/user_avatar/www.isharkfly.com/lhcfl/32/14361_2.png) [@Lhcfl](https://www.isharkfly.com/u/Lhcfl)\
**Post date:** [August 15, 2024, 5:00am UTC](https://www.isharkfly.com/t/discourse-s3/16142/6 "2024-08-15T05:00:11Z")

</div>

没用过S3，不知道

---

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 15, 2024, 8:10am UTC](https://www.isharkfly.com/t/discourse-s3/16142/7 "2024-08-15T08:10:29Z")

</div>

> **[Can Discourse migrate what is already in in locally when it is connected to...](https://meta.discourse.org/t/can-discourse-migrate-what-is-already-in-in-locally-when-it-is-connected-to-s3-storage/321747/2?u=cake_nice)**
>
> 前端是根据cooked的内容来获取图片地址的，也就是说如果你只是把文件复制到了S3里，浏览器依然会尝试冲本地存储的URL里下载图片 要把本地存储的内容迁移到S3，最简单的方法是执行迁移脚本rake uploads:migrate\_to\_s3 The frontend retrieves images based on the cooked content, meaning that if you only copy the files to S3, the browser will...

看来确实是要这样

---

<div class="post-metadata">

**Author:** ![yiknom123](https://www.isharkfly.com/letter_avatar_proxy/v4/letter/y/df788c/32.png) [@yiknom123](https://www.isharkfly.com/u/yiknom123)\
**Post date:** [August 15, 2024, 10:19am UTC](https://www.isharkfly.com/t/discourse-s3/16142/8 "2024-08-15T10:19:35Z")

</div>

Solid post. Good information.

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 15, 2024, 1:08pm UTC](https://www.isharkfly.com/t/discourse-s3/16142/9 "2024-08-15T13:08:32Z")

</div>

如果查看下数据库表，上面有一个 url 字段。

 ![2024-08-15_09-06-58](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/f/f5ce2b1ec714e331e556bc3158930f0f28afbdd6.png)

这个地方给我的感觉是，如果上传到 S3，那么需要使用绝对路径。

---

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 16, 2024, 3:01am UTC](https://www.isharkfly.com/t/discourse-s3/16142/10 "2024-08-16T03:01:34Z")

</div>

如果使用

> **[Can Discourse migrate what is already in in locally when it is connected to...](https://meta.discourse.org/t/can-discourse-migrate-what-is-already-in-in-locally-when-it-is-connected-to-s3-storage/321747/2?u=cake_nice)**
>
> 前端是根据cooked的内容来获取图片地址的，也就是说如果你只是把文件复制到了S3里，浏览器依然会尝试冲本地存储的URL里下载图片 要把本地存储的内容迁移到S3，最简单的方法是执行迁移脚本rake uploads:migrate\_to\_s3 The frontend retrieves images based on the cooked content, meaning that if you only copy the files to S3, the browser will...

提到的方法 ，可能还需要进行什么操作

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 16, 2024, 10:53am UTC](https://www.isharkfly.com/t/discourse-s3/16142/11 "2024-08-16T10:53:00Z")

</div>

A post was split to a new topic: [汉化 Discourse 的组件](https://www.isharkfly.com/t/discourse/16153)

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 16, 2024, 11:15am UTC](https://www.isharkfly.com/t/discourse-s3/16142/12 "2024-08-16T11:15:34Z")

</div>

可能就是有时候没有完全迁移过去。

我遇到过的情况就是上面的方法使用了，页面也显示正常了。

但：只要修改页面，或者 rebuild 页面，图片就会丢失。

算法没有问题，后来发现是 URL 部分还是使用的是老的本地 IMG 地址。

这个就很郁闷了。

能想象，只要页面修改了，或者更新了，老的图片和附件就没有了。

技术和生活类的社区，本来就是图片和附件多，我们这里现在已经有差不多 1万5千多的附件信息。要整理出来真的是挺郁闷的。

## 心得

根据这个经历，我的建议是如果安装了 Discourse 实例，知道自己早晚都要用云存储的话，第一时间就给配好。

这个不是那么非常靠谱，可能会有一些小的问题。

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 16, 2024, 11:29am UTC](https://www.isharkfly.com/t/discourse-s3/16142/13 "2024-08-16T11:29:09Z")

</div>

A post was split to a new topic: [POST 转为主题的功能](https://www.isharkfly.com/t/post/16155)

---

<div class="post-metadata">

**Author:** ![CAKE\_NICE](https://www.isharkfly.com/user_avatar/www.isharkfly.com/cake_nice/32/14319_2.png) [@CAKE\_NICE](https://www.isharkfly.com/u/CAKE_NICE)\
**Post date:** [August 16, 2024, 11:37am UTC](https://www.isharkfly.com/t/discourse-s3/16142/14 "2024-08-16T11:37:59Z")

</div>

我的备份文件已经达到了100M以上了，几乎每天都在一直上涨。

可数据库仅仅20mb左右，如果不能迁移，备份文件依旧非常大

---

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 16, 2024, 12:41pm UTC](https://www.isharkfly.com/t/discourse-s3/16142/15 "2024-08-16T12:41:28Z")

</div>

> [@CAKE\_NICE](#):
>
> 100M以上了，几乎每天都在一直上涨

是可以迁移的。

这个放心，只是可能会有一点点小的问题罢了。

我们的附件现在是 3.2 GB。

 ![2024-08-16_08-39-16](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/7/721242b717398867014db6af0287de37d473c898.png)

随着社区的使用，这个附件的数量只会是越来越大，不会越来越少。

如果是旅游板块的话，一张照片就算处理下也可能有 3 到 5MB。

100 张相关照片就 500 多 MB 了。

所以，建议是尽快越早使用越好，而且还不会占用你服务器的空间，CDN 本身也可以帮你加速下，并且能够把这部分的带宽从 Discourse 实例上拿走。

反正我就是觉得 CDN 越早配越好。
