【问题标题】:rails configuring carrierwave with S3 and cloudfrontrails 使用 S3 和 cloudfront 配置carrierwave
【发布时间】:2016-07-23 20:36:18
【问题描述】:

我有一个 rails4 应用程序,我正在尝试将 CDN 添加到 S3 上传。由于某种原因,它不起作用。

当我出于某种原因在配置中设置 cloudfront 时,它仅对属于同一上传者的一些图像(不是全部)有影响,而且最重要的是,这些图像已损坏。从 S3 显示的图像可以正常工作,但它们也应该从云端提供。

我错过了什么?

通过云端显示(损坏)的图像:

<%= image_tag current_user.avatar.url(:small_thumb), class: 'navbar-avatar', alt: "#{current_user.first_name}'s_avatar", title: "#{current_user.first_name}'s avatar" %>    

https://xyz.cloudfront.net/images/xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg

来自同一上传者的图像由于某种原因从 S3 而非云端显示(显示未损坏)

<%= image_tag post.user.avatar.url(:base_thumb), class: 'post-avatar' %>

https://eaxmple.s3.amazonaws.com/uploads/profile/avatar/10/base_thumb_john_smith.png

配置:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:              'AWS',
    aws_access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']                        
  }
  config.fog_directory  = ENV['S3_BUCKET_NAME']
  config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }
  config.asset_host = ENV['CLOUDFRONT_URL']
end

avatar_uploader.rb

if Rails.env.production?
  storage :fog
else
  storage :file
end

宝石文件

gem 'carrierwave', '~> 0.10.0'
gem 'fog', '~> 1.34.0'
gem 'mini_magick', '~> 4.3.3'

更新

上传者默认存储:

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

我该如何更改:

https://xyz.cloudfront.net/images/xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg

到这里:

https://xyz.cloudfront.net/uploads/profile/avatar/3/small_thumb_3f4ff02.jpg

【问题讨论】:

  • ENV['CLOUDFRONT_URL'] 的值是多少?

标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave amazon-cloudfront


【解决方案1】:

看起来您可能需要将协议添加到您的云端网址:

CLOUDFRONT_URL=https://xyz.cloudfront.net

【讨论】:

  • 我也有 ENV['CLOUDFRONT_URL'] 的 refile gem,它可以通过 cloudfront 正确地提供文件,所以它必须是别的东西。我想这可能是一些fog 配置。我见过不同的宝石和设置,但不知道哪一个是好的。两个奇怪的东西是 url(src 中有两次 cloudfront url),并且只有一些图片由 cloudfront 显示。
  • 当然可以,但是您的 CLOUDFRONT_URL 是否包含协议?
  • 对于未显示的图片,在S3中是公开的还是私有的?
  • 我想,这是因为片段缓存。因此,如果我更改个人资料图片,它将到处损坏。正如我所看到的,现在唯一的问题是在存储桶中查找文件的 url 配置。 Refile gem 非常棒,可以使用默认的 CDN 设置。我应该如何配置网址?我很难弄清楚。
  • 我只是尝试使用inspect手动更改url,如果我删除xyz.cloudfront.net/images/,它可以工作,但仍然不知道如何配置路径。
猜你喜欢
  • 2013-09-13
  • 2012-04-14
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 2022-01-01
  • 1970-01-01
  • 2014-10-13
相关资源
最近更新 更多