Paperclip和AWS S3的自定义URL

6
我们在Rails应用中使用aws-sdk宝石和Paperclip来存储和显示图片:
class User < ActiveRecord::Base
  has_attached_file :image,
                    storage: :s3,
                    s3_credentials: 'config/s3.yml',
                    s3_protocol: :https,
                    styles: {
                        curriculum: '120x120>',
                        medium: '600x600>',
                        thumb: '200x200>'
                    },
                    default_url: 'missing_photo.png'
end

如果我在html.erb文件中使用<%= image_tag current_user.image.url %>,则会得到以下HTML:<img src="https://s3.amazonaws.com/<my_bucket>/users/images/000/000/001/medium/my_image.png?1419989041">。如何使https://s3.amazonaws.com/<my_bucket>成为自定义URL,例如https://example.com?我已经在Cloudfront中设置了我的域名和SSL证书。我在Paperclip S3 Storage documentation中查找了相关信息。有一个:url选项,但是我写的任何内容似乎都不起作用。
2个回答

4
我刚刚遇到了这个问题,以下是我需要使用的设置。
:s3_host_alias => "s3.example.com",
:url => ":s3_alias_url",
:path => ":class/:attachment/:id.:style.:extension"

这个链接中,我了解到除了:s3_host_alias:url之外,您还需要指定path,以便避免出现。
Paperclip::InfiniteInterpolationError

很好,这样做是因为默认的paperclip路径有点奇怪。


s3_alias_url 到底是做什么用的? - Jwan622

3

更新

我做了一个例子,并能够使用以下方法使其工作:

class User < ActiveRecord::Base

  has_attached_file :profile_picture,
                styles: { :medium => "300x300>", :thumb => "100x100>" },
                path: 'users/:attachment/:style-:hash.:extension',
                hash_secret: "94dfda08e2ed473257345563594dfda08e2ed473257345563594dfda08e2ed473257345563594dfda08e2ed4732573455635",
                default_url: "/images/:style/missing.png",
                storage: :s3,
                s3_protocol: 'http',
                url: ':s3_alias_url',
                s3_host_alias: 'distro1234.cloudfront.net',
                s3_credentials: {
                  access_key_id: 'access_id',
                  secret_access_key: 's3cr3tK3y!',
                  acl: 'private',
                  bucket: 'my-bucket',
                  bucket_url: 'https://my-bucket.s3.amazonaws.com',
                }

  validates_attachment_content_type :profile_picture, :content_type => /\Aimage\/.*\Z/

结束

以下是Gemfile的内容:

gem 'paperclip'
gem 'aws-sdk', '~> 1.5.7'

Rails控制台:

=> u.profile_picture.url
=> "http://distro1234.cloudfront.net/users/profile_pictures/original-95eb509f9c81a341945a5a65e59e81880a739d39.jpg?1429638820"

尝试像这样做:
has_attached_file :image,
                storage: :s3,
                s3_credentials: 'config/s3.yml',
                s3_protocol: :https,
                styles: {
                    curriculum: '120x120>',
                    medium: '600x600>',
                    thumb: '200x200>'
                },
                url: ':s3_alias_url',
                s3_host_alias: 'example.com',  
                default_url: 'missing_photo.png'

你可能还需要将s3_protocol设置为https - Dan Fairaizl
当我添加了 url: ':s3_alias_url' ,在显示照片的页面上出现了一个错误 "no implicit conversion of Symbol into String"。 - at.
发生了什么变化?我不知道该添加什么才能使它工作... hash_secret 是我没有的东西...也许我会尝试一下。 - at.
秘密哈希只是rake secret值。除了样式之外,为了使其正常工作并正确保存到S3中,需要其他所有内容。 - Dan Fairaizl
我无法让它工作...和你做的完全一样...不能创建一个正确的URL。 - at.
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接