【问题标题】:Ignore s3_host_alias in paperclip conditionally?有条件地忽略回形针中的 s3_host_alias?
【发布时间】:2015-10-30 04:03:45
【问题描述】:

我们将 cloudfront 用于通过回形针托管在 s3 上的图像;但是它有一些积极的缓存,我们的部分代码需要新数据(一些图像处理)。

有没有办法在调用 url 时覆盖 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']
  }
}

【问题讨论】:

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


    【解决方案1】:

    这可能很脏,但你可以试试这个。

    #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
    

    【讨论】:

      【解决方案2】:

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

      s3 存储模块仍然注册了您正在寻找的插值,当您在附件上调用 #url 时它没有被使用,因为您可能在调用 @987654324 时设置了类似 url: ':s3_alias_url' 的设置@。因此,您可以通过调用interpolate 手动使用回形针插值器。

      例如:

      Paperclip::Interpolations.interpolate(':s3_path_url', User.first.avatar, :original)

      您还可以替换 s3 模块为 ':s3_path_url' 定义的其他插值,例如':s3_domain_url'.

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        相关资源
        最近更新 更多