2013-05-21 4 views
1

Je cherche à utiliser Carrierwave avec Amazon S3 dans mon application Rails, et je continue à obtenir l'erreurCarrierwave Télécharger avec Amazon S3 - 403 Erreur interdite

"Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden)." 
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method. 

Je reçois aussi l'avertissement

"[WARNING] fog: the specified s3 bucket name() is not a valid dns name, which will negatively impact performance. For details see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html" 

config/initializers/carrierwave.rb:

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    provider: 'AWS',      
    aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"], 
    aws_secret_access_key: ENV["AWS_ACCESS_KEY"] 
    } 
    config.fog_directory = ENV["AWS_BUCKET"]     
end 

Mon nom de compartiment est "buildinprogress"

J'ai vérifié que mon ID de clé d'accès et ma clé d'accès étaient corrects.

Comment réparer cette erreur?

+0

Je trouve que si je hardcode le nom du compartiment dans mon fichier carrierewave.rb, cela fonctionne , mais lorsque le nom du compartiment est défini en tant que variable d'environnement, cela ne fonctionne pas. – scientiffic

+0

Cela ne peut pas être; vous avez probablement foiré quelque chose avec les variables ENV alors. Faites un 'ENV [" AWS_BUCKET "]. Inspect' dans le fichier d'initialisation et vérifiez que le bon nom de seau est imprimé ... – severin

Répondre

4

C'est un problème avec Fog/Excom qui a continué à lancer des erreurs aléatoires pour moi aussi.

Mon solution était de supprimer joyau « brouillard » et le remplacer par bijou « carrierwave Aws » à la place.

Ensuite, dans votre * _uploader.rb changement

storage :fog ---> storage :aws 

et mettre à jour votre carrierwave.rb fichier Ex .:

CarrierWave.configure do |config| 
    config.storage = :aws     # required 
    config.aws_bucket = ENV['S3_BUCKET']  # required 
    config.aws_acl = :public_read 

    config.aws_credentials = { 
     access_key_id:  ENV['S3_KEY'],  # required 
     secret_access_key: ENV['S3_SECRET']  # required 
    } 

    config.aws_attributes = { 
           'Cache-Control'=>"max-age=#{365.day.to_i}", 
           'Expires'=>'Tue, 29 Dec 2015 23:23:23 GMT' 
          } 
    end 

Pour plus d'informations consultez la page GitHub carrierwave-aws