您好,
我不得不迁移一个被遗弃的 Discourse 论坛。幸运的是,我们有多位管理员,因此可以执行迁移并下载备份。我们的资源使用了 S3 存储桶,这带来了一些麻烦。在此我提出一个功能请求:
使备份能够包含 S3 资源
我发现(不确定是在重新生成帖子之前还是之后),S3 资源 URL 被重写为内部 URL。因此,我从数据库文件中提取了所有 original 和 optimized 的 S3 URL,并(手动)下载了它们。将它们移动到正确位置后,所有缺失的图片都正常显示了。……如果能有一个自动功能来处理这一点就太好了。
目前,我发现了三个问题:
- 预览图片损坏,但放大后的图片正常
- 预览图片正常,但鼠标悬停无法放大图片
- /t/microlongrange-openhd-edition/379 … 我在首帖中只能插入两个链接
- Gravatar 头像损坏(可能与此无关):
在新发布的帖子中未发现任何问题。
感谢这个优秀的项目,
Limitless Green
michaeld
(Michael - Communiteq)
2
这听起来像是配置错误,而不是漏洞。在恢复之前,您是否在新主机上配置了相同的 S3 存储桶?
我已恢复备份,其中也包含配置。完成后(并强制使用 HTTPS),我完全无法从 S3 存储桶获取图片。
现在我已完全移除了 S3 配置。
这难道不是完整的配置覆盖吗?
michaeld
(Michael - Communiteq)
4
除非 S3 配置之前是使用 app.yml 中的环境变量配置的……
pfaffman
(Jay Pfaffman)
5
有一个隐藏设置可以实现这一功能。Discourse 公司(Cdck)会为他们已知计划自行托管的客户启用该设置。
S3 配置最好按照《使用对象存储进行上传(S3 及克隆)》(Configure an S3 compatible object storage provider for uploads) 中的描述,通过环境变量进行设置。
恢复后,我在 s3 upload bucket 和 s3 cdn url 中设置了配置。
我无法访问(旧服务器的)app.yml。
哦,不错!
在哪里?
我在 backup 部分找到的唯一合适的选项是:

(该选项已被勾选)
我不确定是否表达清楚了:我暂时不需要 S3。但我必须从那里获取资源。没人知道这台服务器会运行多久。
pfaffman
(Jay Pfaffman)
8
如果您无法通过 SSH 访问服务器,则无法更改隐藏设置。
好的。像我这样的情况现在应该怎么做?
什么可能导致图片预览损坏?
pfaffman
(Jay Pfaffman)
10
如果还来得及(即论坛已有活动数据且您不希望丢失),并且您拥有 S3 凭证,那么我可能会将 S3 凭证放入 app.yml 中,然后重新运行恢复操作。之后,您应该可以设置隐藏选项,执行备份,并在没有 S3 的服务器上恢复该备份。
但我想情况并非如此。而且目前尚不清楚具体问题是什么,因为就连您自己也不完全记得当时具体做了什么。
如果确实有数据缺失(且您拥有 S3 凭证),我可能会尝试使用某种 S3 工具下载所有上传文件,然后修改数据库使其指向这些文件。但我在这方面还不够熟练,无法在此详细说明具体操作步骤。
是的,很遗憾我没有 S3 凭证 
我可以复现这些步骤:
- 在 Traefik 后面使用 discourse_docker 安装了一个新的 Discourse 论坛
- 对旧论坛进行了备份(包括一些旧资源)
- 将备份恢复到新论坛
- 强制启用 HTTPS
- 从
dump.sql(来自备份)中提取资源 URL
egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/original\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e original.txt
egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/optimized\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e optimized.txt
- 下载资源:
cat optimized.txt | parallel --gnu "wget -nc -P ./optimized/1X/ {}"(original 同理)
- 移除了 S3 配置
- 运行
rake posts:rebake
如果知道该查找什么,我可以在数据库层面操作 SQL。