Ado*_*lfo 0 ruby-on-rails amazon-s3 paperclip amazon-cloudfront
我正在尝试在 s3_host_alias 中使用 Cloudfront CNAME,但不起作用。
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)
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...
我也遇到了这个问题: :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)
| 归档时间: |
|
| 查看次数: |
1949 次 |
| 最近记录: |