我们遇到了一次服务器崩溃,不得不创建新服务器并从备份中恢复。这是一个艰苦的过程,有关发生的情况以及我们如何恢复的详细信息请参见此处。
现在恢复之后(关键是禁用 S3 上传),帖子中所有附件的链接都已损坏(404 错误)。我已搜索论坛但找不到解决方案,希望有人能指引我正确的方向。
我有两个选择:
- 我能否修复这些指向帖子中嵌入的附件的损坏的
short-url链接(所有损坏的链接都是帖子中的附件;嵌入的图片可以正常渲染,其他内部链接也可以正常工作)?
例如,论坛帖子中附件的 URL 显示为 https://XYZ.com/uploads/short-url/phu1HOLvkE8LWpkKYfnMPSWsvHh.zip。当我在帖子中点击附件链接时(导致 404),我在日志中看到的是这个:
Message (5 copies reported)
Failed to process hijacked response correctly : Errno::ENOENT : No such file or directory @ rb_sysopen - /XXXXX.s3.dualstack.us-east-1.amazonaws.com/optimized/1X/46728e07f9819907d1b18387bf02ea7fc25c7981_2_32x32.ico
Backtrace
/var/www/discourse/app/controllers/static_controller.rb:160:in
read' /var/www/discourse/app/controllers/static_controller.rb:160:inblock (2 levels) in favicon’
/var/www/discourse/lib/distributed_memoizer.rb:16:inblock in memoize' /var/www/discourse/lib/distributed_mutex.rb:33:inblock in synchronize’
/var/www/discourse/lib/distributed_mutex.rb:29:insynchronize' /var/www/discourse/lib/distributed_mutex.rb:29:insynchronize’
/var/www/discourse/lib/distributed_mutex.rb:14:insynchronize' /var/www/discourse/lib/distributed_memoizer.rb:12:inmemoize’
/var/www/discourse/app/controllers/static_controller.rb:138:inblock in favicon' /var/www/discourse/lib/hijack.rb:56:ininstance_eval’
我非常希望在禁用 S3 上传选项并从备份恢复服务器后,有一种方法可以修复这些 short-url 链接。重新烘焙帖子并没有解决问题。
- 如果出于某种原因,这是一个死胡同,无法大规模修复,现在我在 S3 云端有数千个孤立的附件,是否有办法清理它们并释放空间?是否有办法让 Discourse 扫描其 S3 上传存储桶并清除所有孤立的资产?