回形针 s3_host_alias 不起作用

Ado*_*lfo 0 ruby-on-rails amazon-s3 paperclip amazon-cloudfront

我正在尝试在 s3_host_alias 中使用 Cloudfront CNAME,但不起作用。

配置/s3_config.yml

development:
  url: ":s3_host_alias"
  s3_host_alias: dev-cdn.mysite.com
production:
  url: ":s3_host_alias"
  s3_host_alias: cdn.mysite.com
Run Code Online (Sandbox Code Playgroud)

模型/配置文件.rb

def self.s3_config
    @@s3_config ||= YAML.load(ERB.new(File.read("#{Rails.root}/config/s3_config.yml")).result)[Rails.env]
end

has_attached_file :avatar, :storage => :s3, :s3_credentials => "#{Rails.root}/config/s3.yml", :url => self.s3_config['url'], :s3_host_alias => self.s3_config['s3_host_alias'], :styles => { :medium => "300x300>", :circle => "130x130#", :thumb => "50x50>" }, :default_url => "avatar/missing.jpg", :path => ":class/:id/:attachment/:style/:hash.:extension", :url => ":class/:id/:attachment/:style/:hash.:extension", :hash_secret => "***"
Run Code Online (Sandbox Code Playgroud)

在模型中直接使用 CNAME 尝试了代码,但也不起作用。

has_attached_file :avatar, :storage => :s3, :s3_credentials => "#{Rails.root}/config/s3.yml", :url => ":s3_host_alias", :s3_host_alias => "dev-cdn.mysite.com", :styles => { :medium => "300x300>", :circle => "130x130#", :thumb => "50x50>" }, :default_url => "avatar/missing.jpg", :path => ":class/:id/:attachment/:style/:hash.:extension", :url => ":class/:id/:attachment/:style/:hash.:extension", :hash_secret => "***"
Run Code Online (Sandbox Code Playgroud)

该网站一直使用完整的 s3 存储桶 url...

max*_*xhs 5

我也遇到了这个问题: :s3_host_alias 和 :url 都不会从 config/s3.yml 读取。我能够通过将这两个字段都放在模型中但为存储桶、access_key_id 和 secret 保留 s3.yml 来使其工作。

快速解决方法可能如下所示:

if Rails.env.production?
    host_alias = "cdn.mysite.com"
elsif Rails.env.development?
    host_alias = "dev-cdn.mysite.com"
end 
Run Code Online (Sandbox Code Playgroud)

然后

has_attached_file   :avatar, 
                    ...
                    :url            => ":s3_alias_url",
                    :s3_host_alias  => host_alias,
                    :credentials => ...
Run Code Online (Sandbox Code Playgroud)