回形针附件未使用正确的updated_at时间查询字符串

时间:2013-12-06 16:59:08

标签: ruby-on-rails amazon-s3 paperclip amazon-cloudfront

我正在使用Rails + Paperclip + S3。我希望使用我的一个S3存储桶将我的资产托管到Cloudfront。

我知道Cloudfront会缓存资产,但您可以通过将其配置为从源转发查询字符串来中断该缓存。

当我修改资产时,我预计会发生这种情况

  1. 更新ActiveRecord对象的updated_at时间戳。
  2. Paperclip更新S3上图像的查询字符串以反映新的updated_at时间。
  3. 由于新的时间戳查询字符串,Cloudfront会为新映像提供服务。
  4. 但是,Paperclip看起来没有正确更新updated_at时间戳。也许它以某种方式缓存。因此,查询字符串不会更新,Cloudfront也不会破坏缓存。

    我的模特是:

    class UserImage < ActiveRecord::Base
      has_attached_file :image
    end
    
    >> ui = UserImage.find(576925)
    >> ui.image.class
    => Paperclip::Attachment
    
    >> ui.touch
    
    >> ui.updated_at.to_i
    => 1386241041
    
    >> ui.image.updated_at
    => 1386240937
    

    这两个updated_at时间戳应该相同。

1 个答案:

答案 0 :(得分:6)

看起来这可能是早期版本的Paperclip(我在2.7上)的一个错误,因为它适用于未来的版本。

作为参考,我就是这样做的。在我的模型的after_update中,我强制刷新实例,如下所示:

image.instance_write(:updated_at, Time.now.utc)
self.send(:update_without_callbacks)

我必须做update_without_callbacks,这样它就不会陷入回调的无限循环中。

现在,“附件”上的updated_at时间已更新,强制在Cloudfront上刷新。