好的,所以我写了这个问题来自己回答。我希望这个问题是有道理的。
为清楚起见,我遇到了这个问题,因为它是旧图像(与旧 S3 密钥相关联的旧不存在路径),我在之前在同一个 rails 应用程序上的测试中使用另一个 S3 密钥上传。我之前在尝试让 S3 与我的 Rails Spree 应用程序一起工作时这样做了。
我解决这个问题的方法是使用以下命令进入远程服务器上的 Rails 控制台:
$RAILS_ENV=production rails c
然后我订购了所有 Spree:Images 的列表:
$y Spree::Image.all(:order => 'attachment_updated_at')
'y' 是显示 Spree:Image 信息的一种不错的小 yaml 方式,它更人性化。
接下来,我查看了每个图像的 ID,发现其中有大量的 ID 与我的 AWS S3 存储桶中的文件夹不匹配。
在我的案例中,实际上是我的 S3 存储桶中的一个文件夹的最低 ID 号是“1078”,所以我运行了这个:
$Spree::Image.where('id < ?', 1078).destroy_all
这会删除任何 ID 为 1077 或更少的 Spree::Image。
最后,我关闭了 rails 控制台并在我当前的 rails app 目录中的远程服务器上运行它。(在我的情况下是 /home/deployer/apps/potentialapp/current/)
$RAILS_ENV=production rake paperclip:refresh:thumbnails CLASS=Spree::Image
这重新格式化了我在 Spree 上上传的图片,现在一切正常。
希望这可以避免某人非常头疼。(哦,当你去测试时清空你的缓存,看看图像是否真的重新加载了,昨晚凌晨 4 点差点哭了。)