Скрепка отсутствует протокол (https) с Amazon S3
На производстве.рб:
config.paperclip_defaults = {
s3_host_name: "s3.#{ENV.fetch('AWS_REGION')}.amazonaws.com",
storage: :s3,
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
У меня нет ничего в инициализаторах /paperclip.rb.
В моей модели:
class MyModel < ApplicationRecord
has_attached_file :photo, styles: {
thumb: '100x100>',
square: '200x200#',
medium: '300x300>'
}
validates_attachment_content_type :photo, content_type: /\Aimage\/.*\Z/
def photo_url=(url)
self.photo = URI.parse(url)
end
end
И тогда я проверяю это:
m = Model.new
m.photo_url = "https://s3.us-east-2.amazonaws.com/mybucket/sports-grill-miami.jpg"
m.save!
m.photo.url(:thumb)
"//s3.us-east-2.amazonaws.com/mybucket/buckets/photos/000/000/005/thumb/sports-grill-miami.jpg?1495237443"
Почему отсутствует протокол HTTPS? Это сбой моего приложения для Android, потому что требуется протокол для подключения к URL. Нужно ли жестко задавать URL-адрес или справится ли Paperclip?
2 ответа
Решение
Вам необходимо явно добавить протокол в вашу конфигурацию:
:s3_protocol => :https
Вам необходимо указать схему на paperclip
Конфигурация как ниже:
config.paperclip_defaults = {
s3_host_name: "s3.#{ENV.fetch('AWS_REGION')}.amazonaws.com",
storage: :s3,
:s3_protocol => :https, # <- added this
s3_credentials: {
bucket: ENV.fetch('S3_BUCKET_NAME'),
access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
s3_region: ENV.fetch('AWS_REGION'),
}
}
:s3_protocol => :https
назначим схему https
на URL, сгенерированный для ваших ресурсов Amazon S3. Обратитесь к документации для получения более подробной информации.