使用S3时,Paperclip URL助手提供错误的URL

时间:2014-04-02 05:06:43

标签: ruby-on-rails amazon-s3 paperclip

我正在使用带有Rails的Paperclip gem上传图像,当我使用img标签助手和gem时,它会输出错误的URL。这是型号代码:

class Org < ActiveRecord::Base
    has_many :event
    has_many :solookup
    belongs_to :student

    has_attached_file :org_pic, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/assets/clubhouse.jpg", :storage => :s3, :s3_credentials => Proc.new{|a| a.instance.s3_credentials}, :s3_host_name => "branchapp.s3.amazonaws.com"
    validates_attachment_content_type :org_pic, :content_type => /\Aimage\/.*\Z/

    def s3_credentials
        {:bucket => "branchapp", :access_key_id => "hidden", :secret_access_key => "hidden"}
    end
end

上传效果很好,但输出的网址是这样的:

http://branchapp.s3.amazonaws.com/branchapp/orgs/org_pics/000/000/002/original/IMG_0539.JPG?1396413590

我无法弄清楚.com之后如何删除/ branchapp。如果删除该链接可以正常工作。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

has_attached_file中,您需要覆盖url选项。默认情况下,网址使用":s3_path_url",它会像您看到的那样将存储桶放入网址中。您需要改为使用":s3_domain_url"

添加:

:url => ":s3_domain_url"

到您的has_attached_file选项。

注意:":s3_domain_url"应在主机前添加存储桶名称,因此您可能需要从branchapp选项中删除s3_host_name。 (:s3_host_name => "s3.amazonaws.com"

答案 1 :(得分:0)

为了给您更多输入,您可能希望查看:s3 documenation for Paperclip。我们使用这个设置(效果很好):

#config/environments/production.rb
config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com" 

Paperclip::Attachment.default_options.merge!({
   storage: :s3,
   s3_host_name: 's3-eu-west-1.amazonaws.com',
   s3_credentials: {
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
   },
   bucket: ENV['S3_BUCKET_NAME']
})

这允许我们致电:

#app/models/image.rb
Class Image < ActiveRecord::Base
    has_attached_file :image
end