Carrierwave мъгла Amazon S3 изображения не се показват

Инсталирах carrierwave и fog, успешно качих изображенията и ги прегледах за първи път, но сега вече не показва изображенията.

Ето моят конфигурационен файл 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>

Актуализация

нов конфигурационен файл (добавено изтичане на URL адрес за мъгла) 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

работи като чар!


person Francois    schedule 07.12.2012    source източник


Отговори (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, който обхваща това
person deefour    schedule 07.12.2012
comment
здравей, това звучи правилно! Трябва да имам нещо, което го дразни, хаха!, Ще публикувам актуализация - person Francois; 07.12.2012
comment
хаха, моят разработчик и продукцията имат различни db, така че изображенията не се показват на локална, изтеглена prod db и сега изглежда, че работи доста добре. TX! - person Francois; 07.12.2012
comment
Ако променя fog_public от false на true, когато имам изображения, качени и живи в моето приложение, как да накарам изображенията да работят правилно? Да ги преработя ли? - person bcackerman; 21.12.2012
comment
Трябва да промените ACL на тези обекти, за да разрешите разрешения за преглед на „всички“. Един от начините е да напишете малък скрипт (или дори рейк задача чрез вашето приложение Rails) за итериране на обектите в кофата, като маркирате всеки като публичен. Вижте acl= в мъгла скъпоценен камък. Просто бихте задали това на "public-read" за всеки файл и извикайте save. Може да има по-прост начин директно през панела на AWS, но можете да видите колко е прост с този скъпоценен камък. - person deefour; 22.12.2012
comment
Благодаря, това ми помогна със същия общ проблем - person Ryan Rebo; 09.06.2015