0

我的虚拟主机是 Heroku,它不允许将文件保存到本地文件系统。因此,我使用 Carrierwave 将我的文件存储到 Amazon S3 上。

在控制台中,我注意到当我这样做时:

Photo.last.attachment.url

它返回:

 => "https://foobar.s3.amazonaws.com/uploads/users/1/photos/7/foo.jpg" 

正如预期的那样。但是,控制台中的这个过程(返回值)需要 2-3 秒。我的猜测是它试图访问 S3。更糟糕的是,当我加载包含多张照片的网页时,加载需要相当长的时间。

有人提到因为我是通过 S3 远程存储文件,所以我应该缓存“ Photo.last.attachment.url ”的结果。

这意味着,在我的数据库中,我需要有两列:

:attachment 和 :attachment_url

:attachment 将用于 Carrierwave 上传器对象,而 :attachment_url 将是 S3 文件的直接链接。

这是我应该做的吗?有更好的选择吗?

4

2 回答 2

2

这已在最新版本的 Carrierwave 中得到修复。最好不要缓存,URL 创建很便宜。创建 URL 时检查文件是 Fog 的一种行为。现在的行为是简单地给出链接。你可以看到这个讨论: https ://github.com/jnicklas/carrierwave/issues/289和 https://github.com/jnicklas/carrierwave/issues/261

于 2011-04-25T13:06:07.330 回答
0

我会做缓存。我们使用 Paperclip 完成了类似的方法。

或者,您可以缓存正在使用 URL 的视图(部分)。

于 2011-04-12T12:55:57.210 回答