我的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文件。
这是我应该做的吗?还有更好的选择吗?
答案 0 :(得分:2)
这是在Carrierwave的最新版本中修复的。最好不要缓存,URL创建很便宜。在创建URL时检查文件是Fog的行为。现在的行为是简单地给出链接。你可以看到这个讨论: https://github.com/jnicklas/carrierwave/issues/289和 https://github.com/jnicklas/carrierwave/issues/261
答案 1 :(得分:0)
我会做缓存。我们使用Paperclip做了类似的方法。
或者,您可以缓存正在使用URLS的视图(部分)。