Carrierwave fog Изображения Amazon S3 не отображаются - программирование
Подтвердить что ты не робот

Carrierwave fog Изображения Amazon S3 не отображаются

Я установил несущую и туман, успешно загрузил изображения и просмотрел их в первый раз, но теперь он больше не отображает изображения.

Вот мой конфигурационный файл app/config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                                       # required
    :aws_access_key_id      => 'AKIAJKOHTE4WTXCCXAMA',                      # required
    :aws_secret_access_key  => 'some secret key here',                      # required
    :region                 => 'eu-east-1',                                 # optional, defaults to 'us-east-1'
    :host                   => 'https://s3.amazonaws.com',                  # optional, defaults to nil
    :endpoint               => 'https://s3.amazonaws.com:8080'              # optional, defaults to nil
  }
  config.fog_directory  = 'createmysite.co.za'                    # required
  config.fog_public     = false                                   # optional, defaults to true
  #config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end

Вот как выглядит URL-адрес изображения, которое должно отображаться

<img alt="Normal_selection_003" src="https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&amp;Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&amp;Expires=1354859553">

, когда я открываю URL-адрес изображения, это результат работы amazon https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3F179B7CE417BC12</RequestId>
<HostId>
zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65
</HostId>
</Error>

Update

новый файл конфигурации (добавлено время истечения срока действия тумана) app/config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                                       # required
    :aws_access_key_id      => 'AKIAJKOHTE4WTXCCXAMA',                      # required
    :aws_secret_access_key  => 'chuck norris',  # required
  }
  config.fog_directory  = 'createmysite.co.za'                              # required
  config.fog_public     = false                                             # optional, defaults to true
  config.fog_authenticated_url_expiration = 600                             # (in seconds) => 10 minutes
end

работает как шарм!

4b9b3361

Ответ 1

Вы установили config.fog_public в false и используете Amazon S3 для хранения. URL-адреса для частных файлов через S3 являются временными (они подписаны и имеют срок действия). В частности, URL-адрес, опубликованный в вашем вопросе, имеет параметр Expires=1354859553.

1354859553 - Fri, 07 Dec 2012 05:52:33 GMT, который находится в прошлом от текущего времени, поэтому ссылка действительно истек, поэтому вы получаете ошибку Access Denied.

Вы можете дополнительно отрегулировать истечение срока действия (по умолчанию 600 секунд), установив

config.fog_authenticated_url_expiration = ... # some integer here

Если вы хотите не истекающие ссылки, либо

  • установите config.fog_public в true
  • ваше приложение действует как средний человек, обслуживающий файлы до send_file. Здесь есть хотя бы один вопрос о SO, охватывающий этот