有条不紊地忽略回形针中的s3_host_alias?

时间:2015-08-06 20:40:04

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

我们通过paperclip为s3上托管的图像使用cloudfront;但它有一些积极的缓存,我们的部分代码需要新数据(一些图像处理)。

在调用网址时是否有任何覆盖s3_host_alias的方法?

到目前为止,我发现的有关此主题的所有内容都涉及添加 cloudfront,而不是忽略它;即便如此,一切都在全系统范围内。

我们的回形针配置:

# Paperclip Config
Paperclip.options[:command_path] = "/usr/bin/"
config.paperclip_defaults = {
  storage: :s3,
  s3_protocol: :https,
  url: ':s3_alias_url',
  default_url: "https://#{SETTINGS['s3']['bucket']}.s3.amazonaws.com/missing/:class/:attachment/:style.png",
  s3_host_alias: SETTINGS['s3']['cdn_url'],
  s3_credentials: {
    bucket:            SETTINGS['s3']['bucket'],
    access_key_id:     SETTINGS['s3']['access_key_id'],
    secret_access_key: SETTINGS['s3']['secret_access_key']
  }
}

2 个答案:

答案 0 :(得分:0)

这可能很脏,但你可以尝试一下。

#set the value in your controller
Photo.my_custom_attr  = "My custom value"

#In your model
class Photo < ActiveRecord::Base
    cattr_accessor  :my_custom_attr

    Paperclip.interpolates :my_custom_attr do |attachment, style|
        Photo.my_custom_attr
    end 
end

答案 1 :(得分:0)

我有同样的需要所以我做了一些挖掘回形针代码,这是我发现的:

s3存储模块仍然注册了您正在寻找的插值,当您在附件上调用#url时,它不会被使用,因为您可能已经设置了类似{{1}的内容在您对url: ':s3_alias_url'的通话中设置。因此,您可以通过调用interpolate手动使用Paperclip插值器。

例如:

has_attached_file

您还可以替换s3模块为Paperclip::Interpolations.interpolate(':s3_path_url', User.first.avatar, :original)定义的其他插值,例如':s3_path_url'