Paperclip S3 时间戳插值差一秒?

Paperclip S3 timestamp interpolation is one second off?

我在 Rails 应用程序中遇到了一些麻烦,该应用程序使用 Paperclip 存储在 S3 中并随 Cloudfront 一起交付的附件。我已经配置 Paperclip 时间戳插值。一切都按预期在暂存环境中运行。但是,在生产中,实际存储的文件名使用的时间戳相差一秒。我不知道为什么....

回形针配置

if configatron.aws.enabled
  Paperclip::Attachment.default_options[:storage] = :s3
  Paperclip::Attachment.default_options[:s3_credentials] = {
    access_key_id: configatron.aws.access_key,
    secret_access_key: configatron.aws.secret_key
  }
  Paperclip::Attachment.default_options[:protocol] = 'https'
  Paperclip::Attachment.default_options[:bucket] = configatron.aws.bucket
  Paperclip::Attachment.default_options[:s3_host_alias] = configatron.aws.cloudfront_host
  Paperclip::Attachment.default_options[:url] = ":s3_alias_url"

  # Change the default path
  Paperclip::Attachment.default_options[:path] = "images/:class/:attachment/:id_partition/:style-:timestamp-:filename"
  Paperclip.interpolates(:timestamp) do |attachment, style|
    attachment.instance_read(:updated_at).to_i 
  end
end

示例记录

> alumni = Alumni.last
> alumni.updated_at.to_i
 => 1428719699
> alumni.thumb.url
 => "http://d2kektcjb0ajja.cloudfront.net/images/alumnis/thumbs/000/000/664/original-1428719699-diana-zeng-image.jpg?1428719699"

请注意,在上面的 IRB 会话中,updated_at 时间戳与 filename 上的时间戳相匹配,这是正确的。然而,实际存储在 S3 中的文件是 thumb-1428719698-diana-zeng-image.jpg,请注意时间戳是 1 秒!也就是说上面的URL没有找到

这只发生在生产中。在我们的暂存环境中,它运行完美。我不知道为什么会发生上述情况。

有人能帮忙吗?

谢谢!

伦纳德

通过将 Rails 升级到 >= 4.2.1 解决。

问题是Rails 4.2.0 保留小数秒,导致由于四舍五入到最接近的秒而发生漂移。

https://github.com/thoughtbot/paperclip/issues/1772