我很难通过fog
gem 将 Paperclip 上传到 Amazon S3。你看,我正在使用 Heroku,所以这就是要走的路。
问题是:我将应用程序配置为将上传内容发送到我的 Amazon S3 存储桶,正在发送图像,除了对象之外的所有内容都保存为picture
属性设置为/pictures/original/missing.png
,我不知道为什么。
以下是一些有助于缓解问题的数据:
我有一个Work
模型,我在其中为名为“图片”的图像定义了一个回形针附件:
has_attached_file :picture, path: "app/public/system/images/:class/:id/:attachment/:style/img.:extension", styles: { large: "500x500>", medium: "300x300>", thumb: "100x100>" }
我创建了这个特殊的初始化文件paperclip_defaults.rb
,用于告诉 Rails 事实上,我希望上传到 Amazon S3(隐藏实际密钥):
Paperclip::Attachment.default_options.update({
path: "app/public/system/images/:class/:id/:attachment/:style/img.:extension",
storage: :fog,
fog_credentials: {
provider: 'AWS',
aws_access_key_id: 'lovelovelove',
aws_secret_access_key: 'dr_strangelove',
region: 'sa-east-1'
},
fog_directory: 'florencioassets',
fog_public: true,
fog_host: "http://florencioassets.s3-website-sa-east-1.amazonaws.com/"
})
我的表单将multipart
属性设置为 true 和 all。
Work
有一个示例文件,该文件已上传,但与我猜的对象没有正确关联: https ://s3-sa-east-1.amazonaws.com/florencioaassets/app/public/system/images/works/8/图片/原创/img.JPG
那么,关于为什么在没有实际图片的情况下保存对象的任何想法?猜猜这不是上传问题,每个人说。
感谢您的时间!
更新:
我真的希望有人能以优雅的方式帮助我解决这个问题,但无论如何,如果有人感兴趣,我为此做了一个快速的解决方法:
%w(original large medium thumb).each do |meth|
define_method("#{meth}_picture_url") do
"https://s3-sa-east-1.amazonaws.com/florencioassets/app/public/system/images/works/#{self.id}/pictures/#{meth}/img.JPG"
end
end