【问题标题】:How to change S3 bucket URL to bucket first then url second如何将 S3 存储桶 URL 先更改为存储桶,然后再更改 url
【发布时间】:2016-06-24 13:36:50
【问题描述】:

我正在使用 Paperclip 和 aws-sdk gems 创建一个 rails API 应用程序。

应用程序将 URL 保存为字符串。保存的url如下。

http://s3.amazonaws.com/S3_BUCKET_/profiles/avatars/000/000/001/original/avatar.png?1457514823

我无法打开上面的图片。这是因为从 s3 获取它的 url 如下

http://S3_BUCKET_/s3.amazonaws.com//profiles/avatars/000/000/001/original/avatar.png?1457514823

先看看bucket怎么样?但是数据库中保存的url有bucket秒吗?如何将保存的 URL 更改为先拥有存储桶?

config/initializers/paperclip.rb

Paperclip::Attachment.default_options.update(
  default_url: "https://#{Rails.application.secrets.bucket}.s3-ap-southeast-2.amazonaws.com/" \
               "/profiles/avatars/default/missing.jpg")



config/aws.yml

development: &defaults
  access_key_id:     s3_access_key
  secret_access_key: s3 secret key
  s3_region:         ap-southeast-2

test:
  secret_access_key: s3 secret key

staging:
  <<: *defaults
  access_key_id:     s3_access_key
  secret_access_key: <%= ENV["SECRET_KEY_BASE"] %>

production:
  <<: *defaults
  access_key_id:     s3_access_key
  secret_access_key: <%= ENV["SECRET_KEY_BASE"] %>



profile.rb it has the attachment saved

require "base64"
class Profile < ActiveRecord::Base
  belongs_to :user
  validates :user, presence: true

  has_attached_file :avatar, styles: { thumb: "100x100>" }

  validates_attachment_content_type :avatar, content_type: /image/i

  def avatar_url
    avatar && avatar.url
  end

  def avatar_base64=(image_base64)
    file = Paperclip.io_adapters.for(image_base64)
    file.original_filename = file.content_type.sub("image/", "avatar.")
    self.avatar = file
  end

【问题讨论】:

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


    【解决方案1】:

    您可以像这样在config/initializers/paperclip.rb 中添加默认网址:

    Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
    

    或者你可以直接在你的环境配置中进行配置,即config/environments/production.rb:

    config.paperclip_defaults = {
        storage: :s3,
        url: ':s3_domain_url',
        ...
    }
    

    注意:s3_domain_url 是一个字符串,而不是一个符号,这一点很重要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      相关资源
      最近更新 更多