【问题标题】:Should I cache the Carrierwave url?我应该缓存 Carrierwave 网址吗?
【发布时间】:2011-04-12 11:34:32
【问题描述】:

我的虚拟主机是 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 文件的直接链接。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您指出这个错误,并很高兴 gem 的开发人员设法解决了这个问题。非常感谢!
    • 虽然在这种情况下最好不要缓存,但说 URL 创建很便宜是错误的。在复杂的 URL 场景(显示数据层次结构)中,URL 生成可能会很昂贵,因此建议使用缓存。
    • +1 用于提示。我错过了这件事发生的时候。我可能会坚持缓存,但很高兴知道您不再必须(或面对 Fog 为页面上的每个 url 查询 s3)。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多