我应该缓存Carrierwave网址吗?

时间:2011-04-12 11:34:32

标签: ruby-on-rails amazon-s3 carrierwave

我的webhost是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_url

:附件将用于Carrierwave上传器对象,并且:attachment_url将直接链接到S3文件。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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