2

我在尝试着RAILS_ENV=production run rake paperclip:refresh:thumbnails CLASS=Spree::Image

在我当前的 Rails 应用程序目录中的远程服务器上,这样我就可以刷新我过去上传的狂欢图像。

我正在使用 S3,我的存储桶设置正确,因为我可以在我的 AWS S3 存储桶的各个 ID 文件夹中看到我的每个产品图像。

但是每次我运行上述命令时,当 rake 中止时,我都会收到“没有这样的密钥”错误。

该命令在本地运行并且工作正常。(显然没有 RAILS_ENV=production 本地)

4

2 回答 2

3

好的,所以我写了这个问题来自己回答。我希望这个问题是有道理的。

为清楚起见,我遇到了这个问题,因为它是旧图像(与旧 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 点差点哭了。)

于 2013-05-30T19:23:21.070 回答
3

我使用控制台解决了同样的问题并跳过错误(旧/损坏的 S3 资产):

Spree::Image.all.each { |i| i.attachment.reprocess! rescue nil }
于 2014-09-04T16:16:10.713 回答