在最近更新到 2.5.0.beta7 之后,我论坛上的所有图片都损坏了。

头像也被替换成了默认头像。以下是我在仪表板上的建议:
我的“员工帖子资源”:
其中一张图片:/original/2X/4/4064b1cc32199de63ad2fa2b5bd2a0c5b6872c6d.png
然而,我的 S3 中并没有这样的图片:(为什么会发生这种情况?)
我的网站图标和其他标志也丢失了:/original/1X/b32666bfe0e0eac40aacb178c7430c9f7873b397.png
然而,我的 S3 中只包含这些文件:
请注意,URL 是错误的,并且 original 文件夹内没有 1X 文件夹。
我尝试按照这篇帖子的教程操作:
但这并没有解决任何问题。
Benjamin_D
(Benjamin Decotte)
2
我想指出,这张图片并不在你的存储桶中,它应该是 4061…41.png 吧?
它在本地存在吗?
抱歉,用词不当。我想说的是,我注意到它不在 S3 存储桶中,所有对象都不在。
我该如何在本地检查它?
Benjamin_D
(Benjamin Decotte)
4
哦,确实更有道理了 
你可以根据你的设置,使用任意你喜欢的 SSH 客户端在本地检查,文件应该位于类似 /var/discourse/shared/standalone/uploads/default/original/2X/ 的路径下。
因此,你可以运行 ls -R /var/discourse/shared/standalone/uploads/ | grep 4064b 来查找 4064b…d.png 文件。
我和 @masterakay 讨论的是同一个 Discourse 实例。
我们在两年多前就切换到了 S3,本地上传目录中的文件没有比 2018 年更新的。
据我了解,图片会上传到“original”文件夹,经过处理(裁剪、缩小尺寸等)后放入“optimized”文件夹。Discourse 在上传图片时使用的 URL 仍然来自“/original/1X/”文件夹。不知为何,升级后
@sam @codinghorror 非常抱歉把你们卷进来,但这事相当紧急。我们是学生,面对学校要求我们修复图片的巨大压力,实在有些束手无策。
Ryan_Nix
(Ryan Nix)
7
schleifer
(Andrew Schleifer)
9
你们是如何配置 S3 的?是在 app.yml 中设置了某些值,还是仅在管理界面中设置?看起来 DISCOURSE_S3_BUCKET 或 DISCOURSE_S3_BACKUP_BUCKET 的值存在异常。
是的,正如我所解释的,直到最近的更新一切正常。我们已遵循所有步骤。
特别是,我们做了类似以下的事情:
至于这些值,我似乎在 app.yml 中找不到任何已设置的变量。以前并不需要这样。是发生了什么变化吗?
schleifer
(Andrew Schleifer)
11
确实如此。代码中可能存在某些问题,但我们尚不清楚具体是什么以及原因。因此,我们需要更多信息。
配置 S3 有两种方式:您可以在 app.yml 中配置环境变量,也可以在管理界面中输入这些值。两种方式中变量的名称略有不同。
您链接的主题描述了如何在管理界面中配置。如果您是通过这种方式设置网站的,能否告诉我们 s3_upload_bucket 和 s3_backup_bucket 的值是什么?
Ryan_Nix
(Ryan Nix)
13
@schleifer 我也是。我也没有更改过这些设置。我还验证了我的 AWS 凭据可以正常工作。
schleifer
(Andrew Schleifer)
14
哦,这就解释得通了。
问题出在这些设置本不应具有相同的值——请在 设置主题 中搜索“我是否真的需要使用单独的存储桶来存放上传文件和备份?”这一行。
一个维护任务在备份存储桶的内容上运行,由于两者的值重叠,从而影响了上传文件。
@sam 我们可能应该在代码中强制实施这一点,而不仅仅是在文档中说明。
要修复您的站点,需要两个步骤:
首先,您需要更改备份前缀——按照设置主题中的描述,在末尾添加 /backups 就足够了。
然后,将 S3 存储桶中的所有文件移回正确的位置。顶部“default”文件夹中的所有内容都应移回顶层。
例如,那里可能有一个“default/originals”文件夹,需要将其向上移动。
您必须使用 AWS 网页控制台或其他工具来浏览该存储桶。
好的,非常感谢!我会尝试这些步骤,如果发生任何问题,我会回来这里。你知道为什么会突然发生这种情况吗?
嘿 @schleifer,有道理,我已经在存储桶名称中添加了 backups 前缀。
至于现有的上传文件,所有文件都位于 /default/ 目录下(不在子文件夹中)。帖子(以及其他所有地方)中的图片 URL 使用的是 /original/* 或 /optimized/*。
如果我们把 default 文件夹中的所有文件向上移动一级(移到根目录),那么图片将位于 /*。
另外,defaults 内部没有任何子文件夹,只有上传的文件。看起来其中包含带有标准 40 位哈希文件名的文件,以及一些带有如 “_2_10x10” 后缀的文件(我推测这些来自优化处理)。
你建议如何解决这个问题?修复所有帖子中的新链接会花费一些时间。是否有可能根据文件名将这些文件分组到正确的文件夹中?
schleifer
(Andrew Schleifer)
19
这……真没想到。那我们得手动修复一堆东西了。
最关键的问题是:“新上传的文件是否已保存到正确的位置?”
如果确实如此,你可以将旧文件放到一个已知位置,并调整其数据库条目。/default/ 目录下有多少个文件?
新上传的文件已按预期成功存入子文件夹,这很幸运。而且帖子中的链接也指向了正确的位置。
/default/ 目录下有超过 1 万个文件。手动编辑每篇帖子似乎工作量巨大。有没有办法通过脚本来完成?比如对所有帖子进行正则表达式替换?
schleifer
(Andrew Schleifer)
21
是的,这正是我们的计划。下一步是将所有 AWOL 文件放到一个已知的位置。在存储桶中,/original/ 下有哪些子目录?应该有 /1X/,可能还有其他目录。
这是完整的文件夹结构。新上传的文件(运行正常)存储在 /original/2X/*/.jpg。
/
|---backups
|---default
|---(一堆备份 .tar.gz 文件)
|---default
|---(10719 个上传文件,包括 pdf、图片等)
|---inventory
|---1/pesuioforum/{optimized,original}/[DATE]/manifest.{checksum,json}
|---optimized
|---1X
|---(2 个文件)
|---2X
|---{0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}
|---(以上述文件夹名称首字符开头的上传文件)(共 1055 个文件)
|---original
|---2X
|---(与 optimized/2X 相同,520 个文件)
|---tombstone
|---optimized
|---1X
|---(2 个文件)
|---original
|---2X
|---(与 optimized/2X 相同,1 个文件)
接下来要做的是将所有 AWOL 文件放到一个已知位置。
/default/ 似乎已经包含了所有图片。