编辑:看来你的错误和我的不同,听起来像是你的一些图片没有迁移到 S3。抱歉,我看错了。也许下面的一些信息仍然有用。你是按照这份指南设置 S3 上传的吗?Configure an S3 compatible object storage provider for uploads
@evenif - 很遗憾听到你遇到了这些问题。我原本打算为遇到同样问题的人写一份指南,因为有很多信息需要从不同的讨论串中拼凑起来。但我正在等待头像问题的修复,正如你上面所见,我在这方面仍然存在问题。
如果你在 Rails 中运行以下命令,结果是 true 还是 false?
SiteSetting.migrate_to_new_scheme
如果是 false,你可以尝试将其设置为 true,例如:
SiteSetting.migrate_to_new_scheme = true
然后等待一段时间稍后再回来查看(据我所知,这每 15 分钟运行一次),或者如果你想立即运行:
Jobs::MigrateUploadScheme.new.execute(nil)
之后稍等片刻再检查 SiteSetting.migrate_to_new_scheme 是否已变为 false(这意味着应该已完成)。
然后运行:
Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/uploads/default/original/_X/%'").to_a
这应该会找到那些仍有问题且无法迁移的上传记录。在我的情况下,所有这些上传在数据库中都有记录,但实际的图片文件并不存在。
根据列表的大小,你可以复制页面内容,然后通过查找和替换生成一系列命令,以便通过上传 ID 列表删除这些有问题的记录。
Upload.find(1).destroy
Upload.find(2).destroy
Upload.find(3).destroy
将 1、2、3 等替换为实际的上传 ID。将整个列表复制并粘贴到 Rails 中,然后按回车键。这应该会删除这些有问题的记录。
然后,退出 Rails(输入 exit),你只需要运行:
rake posts:rebake
或者
rake posts:rebake_uncooked_posts
rebake_uncooked 允许你在失败时恢复重烘焙过程。我建议除非你有大量上传,否则直接使用普通的 rebake。
之后,一切应该都能正常工作,希望如此。但你的优化头像很可能像我的那样损坏,不过原始文件应该存在于 S3 上。
你可以通过在 Rails 中为显示默认头像的用户运行以下命令,来检查头像是否成功迁移(至少对部分用户而言):
User.find_by_username('username').uploaded_avatar
此外,还可以使用以下命令检查优化版本是否存在:
OptimizedImage.where(upload_id: upload_id).where(version: 2)