我已按照此处的建议,将上传内容从一个 S3 存储桶迁移到了另一个存储桶,并通过 uploads:recover_from_tombstone 和 posts:rebake 的辅助,几乎恢复了一切——但并非全部。
我不是 Ruby 开发者,因此调试能力有限。当我运行 uploads:recover 时,它会输出大量类似以下内容的信息:
警告 /t/foo/489/5 存在不正确的 4ff3ad05b76e1888161f41fd86da66efc16c290c,应为 0b029ef3549e72dd5e3498abc7f979736d279a5e 存储在自定义字段中 ‘rake uploads:fix_relative_upload_links’ 可以修复此问题
警告 /t/bar/498/4 存在不正确的 0649edb23196a8c84a9d71c04147bd8f0c96d0f7,应为 f5b4e4bb3eedcd0fb83a06eecc4920f20c5e2bc4 存储在自定义字段中 ‘rake uploads:fix_relative_upload_links’ 可以修复此问题
警告 /t/bar/498/4 存在不正确的 0649edb23196a8c84a9d71c04147bd8f0c96d0f7,应为 f5b4e4bb3eedcd0fb83a06eecc4920f20c5e2bc4 存储在自定义字段中 ‘rake uploads:fix_relative_upload_links’ 可以修复此问题
这些警告似乎确实对应着上传损坏的帖子,所以听起来很有希望。但是,当我运行 fix_relative_upload_links 时,它似乎什么也没做。
rake uploads:fix_relative_upload_links --trace
** Invoke uploads:fix_relative_upload_links (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:fix_relative_upload_links
skipping missing upload in https://foo.com/t/bar/7/2 <img src="/uploads/default/35/f450f88541e87c52.png" width="198" height="70">
skipping missing upload in https://foo.com/t/bar/7/2 <img src="/uploads/default/36/0b73d33d9df37a66.png" width="120" height="43">
(我认为这两个跳过的文件是 S3 迁移之前的旧上传。S3 上传没有生成先前警告的任何输出。)
我看到一年前有一个关于类似问题的报告,但我找不到任何包含修复方法的类似报告。
我很感激我没有做官方支持的事情,但任何提示都将不胜感激。
我是在迁移几天后才注意到这个问题的。如果我立即注意到,我会尝试使用新的数据库/S3 恢复进行重新迁移,但由于我不想丢失任何最近的帖子,我将不得不从这里开始处理实时站点。
谢谢。
编辑:我现在也尝试过转换损坏的 upload:// URL,并将它们与上传表中的记录进行比较,但我并没有更清楚。
当我检查一个有效的 upload:// URL 时,它会映射到一个具有有效 URL 的 uploads 表记录,但当我检查一个损坏的 URL 时……它也映射到一个具有有效 URL 的记录。似乎数据库中有有效数据,并且文件确实存在于 S3 中,URL 在上传表中分配。我可以在浏览器中毫无问题地访问 S3 URL,所以我不知道为什么它们无法显示。