Ruby on rails 回形针附件在查询字符串时未使用正确的更新\u

Ruby on rails 回形针附件在查询字符串时未使用正确的更新\u,ruby-on-rails,amazon-s3,paperclip,amazon-cloudfront,Ruby On Rails,Amazon S3,Paperclip,Amazon Cloudfront,我使用的是Rails+回形针+S3。我希望使用我的一个S3存储桶将我的资产托管到Cloudfront 我知道Cloudfront缓存资产,但您可以通过将其配置为从源服务器转发查询字符串来破坏该缓存 当我修改资产时,我预计会发生这种情况 ActiveRecord对象的时间戳处的updated_已更新 曲别针更新S3上图像的查询字符串,以反映在时间更新的新的updated\u 由于新的时间戳查询字符串,Cloudfront为新映像提供服务 但是,回形针似乎没有在时间戳处正确更新updated\u。也

我使用的是Rails+回形针+S3。我希望使用我的一个S3存储桶将我的资产托管到Cloudfront

我知道Cloudfront缓存资产,但您可以通过将其配置为从源服务器转发查询字符串来破坏该缓存

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

  • ActiveRecord对象的时间戳处的updated_已更新
  • 曲别针更新S3上图像的查询字符串,以反映在时间更新的新的
    updated\u
  • 由于新的时间戳查询字符串,Cloudfront为新映像提供服务
  • 但是,回形针似乎没有在
    时间戳处正确更新
    updated\u。也许它被缓存了。因此,查询字符串不会更新,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
    
    class-UserImage>ui=UserImage.find(576925)
    >>ui.image.class
    =>回形针::附件
    >>触摸屏
    >>ui.updated_at.to_i
    => 1386241041
    >>ui.image.updated_位于
    => 1386240937
    

    这两个更新的时间戳应该是相同的。

    看起来这可能是早期版本的回形针(我使用的是2.7)的一个bug,因为它在未来的版本中工作

    作为参考,这是我如何让它工作。在模型的after_更新中,我强制刷新实例,如下所示:

    image.instance_write(:updated_at, Time.now.utc)
    self.send(:update_without_callbacks)
    
    我必须在没有回调的情况下执行
    update\u
    ,这样它就不会在回调中陷入无限循环


    现在附件上的
    updated\u在
    时间被更新,强制在Cloudfront上刷新。

    您到底是如何更新记录的?当您发出
    save
    create
    命令时,我认为Rails在
    更新了
    updated\u?我添加了
    ui。触摸
    显示对象如何更新并不重要。